Hi Stuart,

Ahh, got it.  do-it/expect worked perfectly.

Thanks!
Dan

On Dec 14, 12:37 pm, Stuart Sierra <the.stuart.sie...@gmail.com>
wrote:
> Both `describe` and `it` create functions.  That is, they expand out
> to `(fn [] ...)`.  Wrapping `binding` around the creation of a fn has
> no effect.
>
> For finer control over where the fn gets created and how failures get
> reported, you can use `do-it` and `expect`.
>
> (describe ...
>   (do-it ...
>     (binding ...
>       (expect ...)))
>
> This will produce the results you're looking for.
>
> -Stuart Sierra
> clojure.com
>
> On Dec 14, 11:13 am, fuchsd <fuc...@gmail.com> wrote:
>
>
>
>
>
>
>
> > Howdy,
>
> > I asked this on #clojure and posted a question on Stackoverflow
> > (http://stackoverflow.com/questions/4424220/how-do-i-rebind-a-var-in-a-
> > lazytest-describe-test), but no dice.  I'm assuming that it's because
> > this is so simple and I'm doing it so incorrectly that nobody can even
> > begin to formulate a response.  Feel free to tell me to go back and re-
> > R all TFMs ;)
>
> > First of all, sorry if I am screwing up some terminology; I'm pretty
> > new to Clojure. I am trying to write a very simple test using Lazytest
> > that depends on a var binding. I can not seem to rebind a var in the
> > test file and have the code under test use that binding.
>
> > Here is the code I am trying to test:
>
> > (ns liar-liar.core
> >   (:gen-class))
>
> > (def *input-file-name*)
>
> > (defn parse-input
> >   "Just print return a var for now..."
> >   []
> >   *input-file-name*)
>
> > (defn -main [& args]
> >   (binding [*input-file-name* (first args)]
> >     (println (parse-input))))
>
> > And here is the test:
>
> > (ns liar-liar.test.core
> >   (:use lazytest.describe)
> >   (:use liar-liar.core))
>
> > (binding [*input-file-name* "my-input-file"]
> >   (describe parse-input "Just returns a var"
> >     (it "returns a var"
> >       (= "my-input-file" (parse-input)))))
>
> > When I try to run this test, I get this error:
>
> > java.lang.IllegalStateException: Var liar-liar.core/*input-file-name*
> > is unbound.
>
> > Interestingly enough, if I move the binding form:
>
> > (ns liar-liar.test.core
> >   (:use lazytest.describe)
> >   (:use liar-liar.core))
>
> > (describe parse-input "Just returns a var"
> >   (it "returns a var"
> >     (binding [*input-file-name* "my-input-file"]
> >       (= "FAIL" (parse-input)))))
>
> > The test works as it should, but the reporting isn't ideal, as it
> > doesn't print the value of the (parse-input) expression (the test
> > passes if I replace "FAIL" with "my-input-file" though):
>
> > FAILURE: Namespaces liar-liar.test.core #'liar-liar.core/parse-input
> > Just returns a var returns a var
> > at liar_liar/test/core.clj line 7
> > Expression: (binding [*input-file-name* my-input-file] (= FAIL (parse-
> > input)))
> > Result: false
> > Local bindings:
> > {}
>
> > Is there some other way I should be going about doing this kind of
> > testing?
>
> > Thanks! Dan

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to