I have a suite of tests in my leiningen-based Clojure project.
I want to run most of them frequently, but I want to exclude those with the :integration selector because they are slow and flaky.
If I understand correctly there's a built-in :only selector in leiningen which will run only the matching tests:
lein test :only :integration
I want a :not selector which does the opposite (runs all except :integration).
lein test :not :integration
Is there a way to build this with the facilities provided by lein test?
I know I can write a fn like (complement :integration) and put it in the :test-selectors map in my project.clj but it'll be hard-coded to ignore :integration -- what I really want is a general :not that I can parameterize with a keyword, so I can ignore my :slow or :flaky tests in other circumstances.
CodePudding user response:
I don't think you can do it with keywords, since they are picked up by Leiningen as arguments. But you can create a custom test selector that you pass a string:
:test-selectors {:not (fn [m s] (not (contains? m (keyword s))))}
That you can call with lein test :not integration or lein test :not flaky.
