1

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」が返されるため、単体テストに合格することを期待していましたが、代わりに、実際の実装が呼び出されるとテストが失敗し、実際のビューが呼び出されます。

4

2 に答える 2

1

関数のショートカットは必要ありません。使用するだけ(content) => ...です。あなたが今持っているように、midje はあなたのコードが文字通り(#content)を呼び出すことを期待していますが、あなたのindex関数は(content)代わりに呼び出します。midje の構文についての混乱は、関数名に期待される結果を割り当てることを期待しているかもしれませんが、そうではありません。正確な呼び出しを置き換える必要があります。つまり、関数が何らかの引数でindex呼び出す場合、これも考慮する必要があります。content(provided (content "my content") => ...)

于 2015-02-15T21:07:25.943 に答える