0

他の名前空間の他の 2 つの関数を使用する関数をテストしています。

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
      result => truthy))

他の名前空間から関数をスタブ化したいのですが、テストの作成に問題があります。

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
          (function-that-uses-functions-from-other-namespace)
          (provided (other-namespace/function1 "parameter") => "stub_response"))

しかし、このアプローチはうまくいかないようです。ヒントはありますか?Let 節で提供された midje を使用すると、メソッドがスタブ化されない

4

3 に答える 3

4

against-backgroundこれを使用して、単一のファクトだけでなくfactフォーム全体の関数呼び出しをスタブ化できます。

(fact "a test"
      ...
      (against-background
        (other-namespace/function1 "parameter") => "stub_response"))

実際、それはおそらくあなたがリンクした質問でもうまくいったでしょう.

于 2014-04-09T15:58:54.293 に答える
0

を使用して動作し(prerequisite)ますか? このようなもの:

(fact "a test"
  (prerequisite (other-namespace-function1 "parameter) => "stub_response")
  (function-that-uses-functions-from-other-namespace) => truthy))

これにより、好きな古い関数の戻り値を指定できるはずです。これは、実際のファクトを実行したときに再生されます。

fact-wide-prerequisites をご覧ください。これはprovided、実際のチェッカーと同じ構文を使用しながら、特定の場合のスタイルのテストに固執できるためです。

于 2014-04-11T16:52:48.637 に答える
0

前提条件が設定されるlet前に、関数をすぐに実行するため、なしで試してください。

(fact "a test"
  (function-that-uses-functions-from-other-namespace) => truthy
  (provided (some-internal-func arg1 arg2) => some-result
            (other-internal-func) => other-result))

関数をスタブ化する必要があるだけですrequire。それらは別の名前空間からのものである可能性があります。

プロトコル メソッドはこの方法でスタブ化できないことに注意してください。

于 2014-04-10T09:15:26.603 に答える