Компонент тестирования Clojurescript / Reagent Unit - имитация onChange

Для компонента, в котором у меня есть текстовое поле, мне нужно иметь возможность изменять текст в нем из теста:

(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))...

В тесте визуализирую на экране:

(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 в тексте:

Мы устали

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

а также

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

Но не работает ...


person Dan Bunea    schedule 19.12.2015    source источник


Ответы (2)


Я не очень хорошо знаю jQuery, но разве ваш код не должен быть больше похож на (js/$ "#txt_city") (примечание: параметр - это строка, а не ключевое слово).

Также посмотрите сами тесты реагентов для вдохновения: https://github.com/reagent-project/reagent/blob/master/test/reagenttest/testreagent.cljs

person Mike Thompson    schedule 21.12.2015
comment
Привет, Майк, я действительно использую. jayq как оболочку jQuery. Я обнаружил статью о тестировании в ре-фрейме, мне нужно взглянуть на нее поближе. Спасибо - person Dan Bunea; 21.12.2015
comment
Ссылка предоставлена ​​для модульных тестов реагентов. Не связано с переделкой кадра. - person Mike Thompson; 22.12.2015
comment
Извините, я этого не видел. Спасибо - person Dan Bunea; 22.12.2015

Ответ - 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

 :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"]]
person Dan Bunea    schedule 22.12.2015