Мидже `with-state-changes` и вызовы функций

Следующий код работает (очевидно):

(use [midje.sweet])

(with-state-changes [(before :contents (println "setup") :after (println "teardown"))]
  (fact "one" 
    (println "doing 1")
    1 => 1)
  (fact "two"
    (println "doing 2")
    (+ 1 1) => 2))

Результат является ожидаемым:

setup
doing 1
doing 2
teardown

Но я хочу, чтобы мои факты были сгруппированы в отдельную функцию следующим образом:

(defn my-facts []
  (fact "one" ...)
  (fact "two" ...)
  #_( ... ))

(with-state-changes [(before :contents (println "setup") :after (println "teardown"))]
  (my-facts))

На этот раз midje не может выполнить код, я получаю следующую ошибку:

Midje could not understand something you wrote: 
        Background prerequisites created by the wrapping version of
        `against-background` only affect nested facts. This one
        wraps no facts.

        Note: if you want to supply a background to all checks in a fact, 
        use the non-wrapping form. That is, instead of this:
            (fact 
              (against-background [(f 1) => 1] 
                (g 3 2 1) => 8 
                (h 1 2) => 7)) 
        ... use this:
            (fact 
              (g 3 2 1) => 8 
              (h 1 2) => 7 
              (against-background (f 1) => 1)) 

Есть ли способ достичь моей цели? Я хочу использовать средства настройки и демонтажа Midje, но все же смогу хранить мои факты в отдельном fn,

1 ответ

Я потратил некоторое время на просмотр исходного кода Midje и не думаю, что это возможно. Midje в значительной степени полагается на синтаксический анализ и переписывание кода во время макроразложения, и к тому времени, когда он получит результат вашего отдельного вызова функции, макрос Midje (факт и т. Д.) Уже будет расширен и оценен. Если вы действительно настроены, вы, вероятно, могли бы сделать это, но для предоставления Мидже доступа к вашим необработанным формам фактов пришлось бы использовать макрос для отдельных фактов, а не функцию. Midje - это почти все макросы, поэтому сложно взаимодействовать с чем-либо еще.

Другие вопросы по тегам