测试函数调用或clojure中的语句未运行

问题描述 投票:2回答:2

我写了看起来像这样的代码

(testing "check that for all these roles there's an alert"
    (binding [*profile* account-exceeded-limits]
      (let [overview-page (overview-container sample-form
                                              :role readonly-no-download)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))
      (let [overview-page (overview-container sample-form
                                              :role dataentry)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))
      (let [overview-page (overview-container sample-form
                                              :role editor)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))
      (let [overview-page (overview-container sample-form
                                              :role member)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))
      (let [overview-page (overview-container sample-form
                                              :role collaborator)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))
      (let [overview-page (overview-container sample-form
                                              :role readonly)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))))

我需要重构此代码以使其更干燥。

所以我尝试了这个

(testing "check that for all these roles theres an alert"
    (for [role [dataentry readonly-no-download editor member collaborator
             readonly]]
      (let [overview-page (overview-container sample-form
                                              :role role)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning")))))

似乎测试未运行。

我也尝试过:

(testing "check that for all these roles theres an alert"
(map (fn [role]  (let [overview-page (overview-container sample-form
                                              :role role)]
        (is (dommy/has-class?
             (-> overview-page (sel1 [:div#export-list-panel :.panel-body
                                      :.alert]))
             "alert-warning"))) [dataentry readonly-no-download editor member collaborator
             readonly])))

再次,似乎仍然没有运行测试。

可能是什么原因造成的?有什么办法可以使我的测试干燥机?我应该尝试使测试干燥吗?

testing clojure clojurescript
2个回答
1
投票

在Clojure中,formap函数都是惰性的,只有在对输出执行某些操作后才能运行。

由于您不在乎输出,因此应将for转换为doseq,该值始终立即运行(非延迟),并且可以在此处产生想要的副作用。

请确保也将the Clojure CheatSheet添加为书签,并始终在浏览器选项卡中将其保持打开状态!


0
投票

虽然已经解决了您的代码未运行的原因,但我想指出are

are

将允许类似:

(are argv expr & args)

Checks multiple assertions with a template expression.
See clojure.template/do-template for an explanation of
templates.
 Example: (are [x y] (= x y)  
              2 (+ 1 1)
              4 (* 2 2))
Expands to: 
         (do (is (= 2 (+ 1 1)))
             (is (= 4 (* 2 2))))
 Note: This breaks some reporting features, such as line numbers.
© www.soinside.com 2019 - 2024. All rights reserved.