Run tests from Clojure Repl and Leiningen

后端 未结 3 1950
自闭症患者
自闭症患者 2021-01-31 08:14

As a newbie to clojure, I have used leiningen to create a sample project with

lein new app first-project

which gave me this directory



        
相关标签:
3条回答
  • 2021-01-31 08:57

    Start a REPL with lein repl, then use require

    (require '[clojure.test :refer [run-tests]])
    (require 'your-ns.example-test :reload-all)
    (run-tests 'your-ns.example-test)
    

    I prefer to stay in the user namespace, as opposed to changing it with in-ns as mentioned by another answer. Instead, pass the namespace as an argument to run-tests (as shown above).

    I'd also recommend staying away from (use 'clojure.test); that is why I suggested (require '[clojure.test :refer [run-tests]]) above. For more background, read http://dev.clojure.org/jira/browse/CLJ-879

    0 讨论(0)
  • 2021-01-31 09:00

    To recap:

    Way of require

    Full qualification of functions is only needed if you issued an in-ns earlier. Then do:

    (clojure.core/require '[clojure.core :refer [require]]
                          '[clojure.test :refer [run-tests]]
                          '[clojure.repl :refer [dir]])
    

    ; Load whatever is in namespace "foo.bar-test" and reload everything
    ; if `:reload-all` has been additionally given
    
    (require 'foo.bar-test :reload-all) 
    ;=> nil
    
    ; List your tests for good measure (Note: don't quote the namespace symbol!)
    
    (dir foo.bar-test)
    ;=> t-math
    ;=> t-arith
    ;=> t-exponential
    ;=> nil 
    
    ; Check meta-information on a test to verify selector for example 
    
    (meta #'foo.bar-test/t-math)
    ;=> {:basic-math true, :test #object[foo.bar_tes...
    
    ; `run-tests` will probably run nothing because the current namespace
    ; doesn't contain any tests, unless you have changed it with "in-ns"
    
    (run-tests) 
    ;=> Ran 0 tests containing 0 assertions.
    
    ; run tests by giving namespace explicitly instead
    
    (run-tests 'foo.bar-test) 
    ;=> Ran 3 tests containing 29 assertions.
    
    0 讨论(0)
  • 2021-01-31 09:02

    In your example above the repl is in the wrong namespace. It may work better if you switch the repl to the core_test namespace. and then run (run-tests).

    (in-ns 'first-project.core-test)
    (run-tests)
    

    Another fun way of developing tests is to just run them from the REPL until they work, because tests are normal functions with some extra metadata.

    (in-ns 'first-project.core-test)
    (my-test)
    

    Remember you have to load the file in addition to calling in-ns Let's say your test file is tests/first_project/core_test.clj, then you will need to call

    (load "tests/first_project/core_test")
    (in-ns 'first-project.core-test)
    (my-test)
    

    Keep in mind that _ in the file system becomes - in the namespace and / becomes ..

    0 讨论(0)
提交回复
热议问题