有一些基本的東西我沒有在這裏。我期待下面的測試通過。但第二個測試用例「分段」/「分段」失敗。它好像與-reffs-fn一樣未能通過測試用例實例。但伐木業說一切都很好。這很混亂。with -refs-fn無法從do-seq獲取綁定?
(deftest test-bad-derive-s3-environment
(testing "variants of props environments"
(doseq [test-case [{:env "qa1" :expect "qa1"}
{:env "dev" :expect "qa1"}
{:env "staging" :expect "staging"}]]
(log/infof "test-case %s" test-case)
(with-redefs-fn {#'config/environment (fn [] (:env test-case))}
(let [actual (fs/derive-s3-environment (config/environment))
_ (log/infof "within redefs :env %s :expect %s" (:env test-case) (:expect test-case))]
#(is (= actual (:expect test-case))))))))
...
lein test com.climate.test.mapbook.filestore
2016-05-03 16:16:29,353 INFO filestore:288 - test-case {:env "qa1", :expect "qa1"}
2016-05-03 16:16:29,355 INFO EnvConfig:98 - Loading config properties from /export/disk0/wb/etc/env.properties
2016-05-03 16:16:29,357 INFO EnvConfig:98 - Loading config properties from /export/disk0/wb/etc/local.properties
2016-05-03 16:16:29,358 INFO filestore:288 - within redefs :env qa1 :expect qa1
2016-05-03 16:16:29,359 INFO filestore:288 - test-case {:env "staging", :expect "staging"}
2016-05-03 16:16:29,359 INFO filestore:288 - within redefs :env staging :expect staging
lein test :only com.climate.test.mapbook.filestore/test-bad-derive-s3-environment
FAIL in (test-bad-derive-s3-environment) (filestore.clj:29)
variants of props environments
expected: (= actual (:expect test-case))
actual: (not (= "qa1" "staging"))
2016-05-03 16:16:29,364 INFO filestore:288 - test-case {:env "dev", :expect "qa1"}
2016-05-03 16:16:29,364 INFO filestore:288 - within redefs :env dev :expect qa1
爲什麼我的with-redefs-fn無法根據當前測試用例重新定義config/environment函數?
我現在正在努力理解with-redefs-fn的效用。 with-redefs像冠軍一樣工作。 –
'with-redefs-fn'是一個實現細節 - 它存在並且是公有的,所以'with-redefs'可以在其擴展中使用它。用戶代碼通常不應該直接調用它。也許我應該在答案中提到這一點! –
其實我回來了。大多數情況下'with-redefs'更方便,但'with-redefs-fn'允許重新創建一個動態創建的Vars集合,所以它在某些場景中可能很有用。 –