Midje обеспечивает функцию не заглушки в обработчике Compojure / Ring
Я пытаюсь использовать Midje, чтобы заглушить представление в модульном тесте обработчика, но мое использование Midje (предоставляется), очевидно, не правильно.
Я упростил и добавил представление к (контентной) функции в обработчике:
(ns whattodo.handler
(:use compojure.core)
(:require [whattodo.views :as views]))
(defn content [] (views/index))
(defn index [] (content))
(defroutes app
(GET "/" [] (index)))
и я пытаюсь проверить это с помощью
(ns whattodo.t-handler
(:use midje.sweet)
(:use ring.mock.request)
(:use whattodo.handler))
(facts "It returns response"
(let [response (app (request :get "/"))]
(fact "renders index view" (:body response) => "fake-html"
(provided (#'whattodo.handler/content) => (fn [] "fake-html")))))
Я ожидал, что функция-заглушка будет вызываться, возвращая 'fake-html' и, следовательно, проходить модульный тест, но вместо этого тест завершается неудачно, когда вызывается реальная реализация - вызывая реальное представление.
2 ответа
Сегодня я обнаружил, что мои области были перепутаны - блок let, представляющий ответ, был вне вызова факта, который включал предоставленный. Таким образом, ответ был создан до того, как предоставленный был вызван.
Рабочий код, который прошел этот ранний тест, вместо этого использовал вызов на фоне
(facts "It returns response"
(against-background (whattodo.handler/content) => "fake-html")
(let [response (app (request :get "/"))]
(fact "renders index view"
(:body response) => "fake-html")))
Вам не нужен ярлык функции, просто используйте (content) => ...
, Как у вас есть сейчас, Midje ожидает, что ваш код вызывает буквально (#content)
, но твой index
вызовы функций (content)
вместо. Ваша путаница с синтаксисом midje может заключаться в том, что вы ожидаете, что назначаете имени функции ожидаемый результат, но это не так. Вы должны заменить точный вызов. Т.е. если твой index
функция будет вызывать content
с некоторым аргументом, вам придется учитывать это, например, (provided (content "my content") => ...)