Clojurescript/试剂单元测试组件-模拟onChange [英] Clojurescript/Reagent Unit testing component - simulate onChange

查看:81
本文介绍了Clojurescript/试剂单元测试组件-模拟onChange的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于具有文本框的组件,我需要能够从测试中更改其中的文本:

For a component where I have a textbox, I need to be able to change the text in it from the test:

(defn choose-city-component []
  (let [inner-state (r/atom {:text ""})]
    (fn []
      [:div
       [:input#txt_city {
            :type "text"
            :value (@inner-state :text)
             :on-change #(swap! inner-state assoc :text (-> % .-target .-value))...

在测试中,我将其呈现在屏幕上:

In the test I render it on the screen:

(deftest choose-city-component-test-out
  ;;GIVEN render component in test
  (let [comp (r/render-component [w/choose-city-component]
                             (. js/document (getElementById "test")))]
    ;;WHEN changing the city....

现在使用jQuery触发器,我正在尝试在文本上模拟onChange:

Now using jQuery trigger I'm trying to simulate an onChange on the text:

我们尝试了

(.change ($ :#txt_city) {"target" {"value" "Paris"}})

(.trigger ($ :#txt_city) "change" {"target" {"value" "Paris"}}))

但这不起作用...

推荐答案

答案是cljs-react-test:

The answer is cljs-react-test:

(deftest choose-city-component-test-out
  (let [comp (r/render-component [w/choose-city-component]
                             (. js/document (getElementById "test")))
    expected-invocations (atom [])]
    (with-redefs [weather-app.core/fetch-weather #(swap! expected-invocations conj %)]
      ;;GIVEN render component in test
      ;;WHEN changing the city and submitting  
      (sim/change (sel1 :#txt_city) {:target {:value "london"}})
      (sim/click  (sel1 :#btn_go) nil)
      ;;ASSERT london should be sent to fetch-weather
      (is (=["london"] @expected-invocations))
      )))

我们使用的地方:

   [cljs-react-test.simulate :as sim]
   [dommy.core :as dommy :refer-macros [sel1 sel]]

和在project.clj

and in project.clj

 :dependencies [[org.clojure/clojure "1.7.0"]
             [org.clojure/clojurescript "1.7.170"]
             [org.clojure/core.async "0.2.374"]
             [reagent "0.5.1" :exclusions [cljsjs/react]]
             [cljs-react-test "0.1.3-SNAPSHOT"]
             [cljsjs/react-with-addons "0.13.3-0"]
             [cljs-ajax "0.5.2"]
             [jayq "2.5.4"]]

这篇关于Clojurescript/试剂单元测试组件-模拟onChange的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆