How do I get emacs cider (clojure mode) to use my test environment variables when running tests?
Asked Answered
I

1

10

I've set up separate database-url for development and test environments, and this works nicely when running my webapp in the REPL and from the lein test on the command line. Here's my profiles.clj:

{:profiles/dev  {:env {:database-url "wiki"}}
 :profiles/test {:env {:database-url "wiki-test"}}}

And evidence of the right database instance being hit (I'm using CouchDB):

;; Running the site from the REPL:
[info] [<0.12149.0>] 127.0.0.1 - - GET /wiki/home-page 200
[info] [<0.10353.0>] 127.0.0.1 - - GET /wiki/about 200

;; Running lein test:
[info] [<0.12026.0>] 127.0.0.1 - - GET /wiki-test/welcome 404
[error] [<0.12933.0>] Could not open file /usr/local/var/lib/couchdb/wiki-test.c

However, when I run tests via Cider in Emacs it uses the dev environment and therefore the wrong database instance.

How do I fix this?

Incompressible answered 6/2, 2017 at 13:57 Comment(0)
U
4

I suggest you try using with-redefs for that.

Something like this:

(with-redefs [db (get-my-test-db)]
  (run-my-tests)

Where db is the symbol to which you bind your db handle in your tests.

This article should be helpful: Isolating External Dependencies in Clojure

Underfeed answered 6/2, 2017 at 15:2 Comment(2)
Thanks, I think I can see how that would work, but it wouldn't use the test environment right? Maybe an alternative approach is to get Cider to use the test environment by default?Incompressible
This worked. I put the function call with-redefs into a fixture so that it's called for every test.Incompressible

© 2022 - 2024 — McMap. All rights reserved.