diff --git a/examples/node-test-example/src/app/reagent_test.cljs b/examples/node-test-example/src/app/reagent_test.cljs index 0536c85..d8cc8db 100644 --- a/examples/node-test-example/src/app/reagent_test.cljs +++ b/examples/node-test-example/src/app/reagent_test.cljs @@ -2,7 +2,7 @@ "Testing Reagent components: render!, fire-event, screen, within, and mocks." (:require [app.components :refer [counter]] - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.mocks :as mocks] [react-testing-library-cljs.reagent.fire-event :as fire-event] [react-testing-library-cljs.reagent.render :refer [act render!]] @@ -10,27 +10,29 @@ [react-testing-library-cljs.within :as within])) (deftest counter-increments - (testing "clicking the button updates the rendered state" - (render! [counter]) - (is (= "0" (.-textContent (screen/get-by-test-id "count")))) - ;; Wrap interactions that cause re-renders in `act` so React flushes them. - (act #(fire-event/click (screen/get-by-role "button" {:name "Increment"}))) - (is (= "1" (.-textContent (screen/get-by-test-id "count")))))) + (render! [counter]) + (is (= "0" (.-textContent (screen/get-by-test-id "count"))) + "renders the initial state") + ;; Wrap interactions that cause re-renders in `act` so React flushes them. + (act #(fire-event/click (screen/get-by-role "button" {:name "Increment"}))) + (is (= "1" (.-textContent (screen/get-by-test-id "count"))) + "clicking the button updates the rendered state")) (deftest scoped-queries-with-within - (testing "within scopes a query to a subtree" - (render! [:div - [:section {:aria-label "sidebar"} - [:button "Save"]] - [:button "Save"]]) - (let [sidebar (screen/get-by-role "region" {:name "sidebar"})] - (is (some? (within/get-by-role sidebar "button" {:name "Save"}))) - ;; Two "Save" buttons exist overall; within disambiguates. - (is (= 2 (count (screen/get-all-by-role "button" {:name "Save"}))))))) + (render! [:div + [:section {:aria-label "sidebar"} + [:button "Save"]] + [:button "Save"]]) + (let [sidebar (screen/get-by-role "region" {:name "sidebar"})] + (is (some? (within/get-by-role sidebar "button" {:name "Save"})) + "within scopes a query to a subtree") + ;; Two "Save" buttons exist overall; within disambiguates. + (is (= 2 (count (screen/get-all-by-role "button" {:name "Save"}))) + "both buttons are found without scoping"))) (deftest mock-handler-records-calls - (testing "mocks/create returns [handler calls reset!]" - (let [[on-click calls] (mocks/create)] - (render! [:button {:on-click on-click} "Submit"]) - (act #(fire-event/click (screen/get-by-text "Submit"))) - (is (= 1 (count @calls)))))) + (let [[on-click calls] (mocks/create)] + (render! [:button {:on-click on-click} "Submit"]) + (act #(fire-event/click (screen/get-by-text "Submit"))) + (is (= 1 (count @calls)) + "the mock records the click"))) diff --git a/examples/re-frame-example/src/app/events_test.cljs b/examples/re-frame-example/src/app/events_test.cljs index 1f3f77a..a1a9961 100644 --- a/examples/re-frame-example/src/app/events_test.cljs +++ b/examples/re-frame-example/src/app/events_test.cljs @@ -3,14 +3,14 @@ (:require [app.events :as events] [app.subs :as subs] - [cljs.test :refer [deftest is testing]])) + [cljs.test :refer [deftest is]])) (deftest event-handlers - (testing "initialize sets the starting count" - (is (= {:count 0} (events/initialize nil nil)))) - (testing "increment bumps the count" - (is (= {:count 1} (events/increment {:count 0} nil))))) + (is (= {:count 0} (events/initialize nil nil)) + "initialize sets the starting count") + (is (= {:count 1} (events/increment {:count 0} nil)) + "increment bumps the count")) (deftest subscription-handlers - (testing "count-value reads :count from the db" - (is (= 5 (subs/count-value {:count 5} nil))))) + (is (= 5 (subs/count-value {:count 5} nil)) + "count-value reads :count from the db")) diff --git a/examples/re-frame-example/src/app/views_test.cljs b/examples/re-frame-example/src/app/views_test.cljs index 585148f..bfa1440 100644 --- a/examples/re-frame-example/src/app/views_test.cljs +++ b/examples/re-frame-example/src/app/views_test.cljs @@ -4,7 +4,7 @@ (:require [app.events :as events] [app.views :as views] - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [re-frame.core :as rf] [react-testing-library-cljs.reagent.fire-event :as fire-event] [react-testing-library-cljs.reagent.render :refer [act render!]] @@ -14,20 +14,22 @@ (.-textContent (screen/get-by-test-id "count"))) (deftest view-reflects-state - (testing "the view renders the current count and reacts to state changes" - (rf/dispatch-sync [::events/initialize]) - (render! [views/counter]) - (is (= "0" (count-text))) - ;; dispatch-sync updates the db synchronously; act flushes the re-render. - (act #(rf/dispatch-sync [::events/increment])) - (is (= "1" (count-text))))) + (rf/dispatch-sync [::events/initialize]) + (render! [views/counter]) + (is (= "0" (count-text)) + "renders the current count") + ;; dispatch-sync updates the db synchronously; act flushes the re-render. + (act #(rf/dispatch-sync [::events/increment])) + (is (= "1" (count-text)) + "reacts to state changes")) (deftest ^:async clicking-button-increments - (testing "clicking the button dispatches an event and updates the view" - (rf/dispatch-sync [::events/initialize]) - (render! [views/counter]) - (is (= "0" (count-text))) - (fire-event/click (screen/get-by-role "button" {:name "Increment"})) - ;; re-frame `dispatch` is asynchronous, so wait for the DOM to reflect the - ;; new count rather than asserting immediately. - (is (some? (await (screen/find-by-text "1")))))) + (rf/dispatch-sync [::events/initialize]) + (render! [views/counter]) + (is (= "0" (count-text)) + "renders the initial count") + (fire-event/click (screen/get-by-role "button" {:name "Increment"})) + ;; re-frame `dispatch` is asynchronous, so wait for the DOM to reflect the + ;; new count rather than asserting immediately. + (is (some? (await (screen/find-by-text "1"))) + "clicking the button dispatches an event and updates the view")) diff --git a/src/test/react_testing_library_cljs/fire_event_test.cljs b/src/test/react_testing_library_cljs/fire_event_test.cljs index 701f1e0..c6749e6 100644 --- a/src/test/react_testing_library_cljs/fire_event_test.cljs +++ b/src/test/react_testing_library_cljs/fire_event_test.cljs @@ -1,7 +1,7 @@ (ns react-testing-library-cljs.fire-event-test (:require ["react" :as react] - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.fire-event :as fire-event] [react-testing-library-cljs.render :as rtl] [react-testing-library-cljs.screen :as screen])) @@ -17,41 +17,41 @@ "Increment")))) (deftest click-test - (testing "click fires and updates state" - (rtl/cleanup) - (rtl/render (react/createElement counter-component)) - (let [btn (screen/get-by-text "Increment")] - (fire-event/click btn) - (is (= "1" (.-textContent (screen/get-by-test-id "count"))))))) + (rtl/cleanup) + (rtl/render (react/createElement counter-component)) + (let [btn (screen/get-by-text "Increment")] + (fire-event/click btn) + (is (= "1" (.-textContent (screen/get-by-test-id "count"))) + "click fires and updates state"))) (deftest change-test - (testing "change updates input value" - (rtl/cleanup) - (rtl/render (react/createElement "input" #js {:placeholder "type here" - :defaultValue ""})) - (let [input-el (screen/get-by-placeholder-text "type here")] - (fire-event/change input-el {:target {:value "new value"}}) - (is (= "new value" (.-value input-el)))))) + (rtl/cleanup) + (rtl/render (react/createElement "input" #js {:placeholder "type here" + :defaultValue ""})) + (let [input-el (screen/get-by-placeholder-text "type here")] + (fire-event/change input-el {:target {:value "new value"}}) + (is (= "new value" (.-value input-el)) + "change updates input value"))) (deftest key-down-returns-default-prevented-boolean - (testing "returns true when nothing calls preventDefault (single arity)" - (rtl/cleanup) - (rtl/render (react/createElement "input" #js {:placeholder "plain"})) - (is (true? (fire-event/key-down (screen/get-by-placeholder-text "plain"))))) + (rtl/cleanup) + (rtl/render (react/createElement "input" #js {:placeholder "plain"})) + (is (true? (fire-event/key-down (screen/get-by-placeholder-text "plain"))) + "returns true when nothing calls preventDefault (single arity)") - (testing "returns true when nothing calls preventDefault (options arity)" - (rtl/cleanup) - (rtl/render (react/createElement "input" #js {:placeholder "plain"})) - (is (true? (fire-event/key-down (screen/get-by-placeholder-text "plain") {:key " "})))) + (rtl/cleanup) + (rtl/render (react/createElement "input" #js {:placeholder "plain"})) + (is (true? (fire-event/key-down (screen/get-by-placeholder-text "plain") {:key " "})) + "returns true when nothing calls preventDefault (options arity)") - (testing "returns false when a handler calls preventDefault (single arity)" - (rtl/cleanup) - (rtl/render (react/createElement "input" #js {:placeholder "prevents" - :onKeyDown (fn [e] (.preventDefault e))})) - (is (false? (fire-event/key-down (screen/get-by-placeholder-text "prevents"))))) + (rtl/cleanup) + (rtl/render (react/createElement "input" #js {:placeholder "prevents" + :onKeyDown (fn [e] (.preventDefault e))})) + (is (false? (fire-event/key-down (screen/get-by-placeholder-text "prevents"))) + "returns false when a handler calls preventDefault (single arity)") - (testing "returns false when a handler calls preventDefault (options arity)" - (rtl/cleanup) - (rtl/render (react/createElement "input" #js {:placeholder "prevents" - :onKeyDown (fn [e] (.preventDefault e))})) - (is (false? (fire-event/key-down (screen/get-by-placeholder-text "prevents") {:key " "}))))) + (rtl/cleanup) + (rtl/render (react/createElement "input" #js {:placeholder "prevents" + :onKeyDown (fn [e] (.preventDefault e))})) + (is (false? (fire-event/key-down (screen/get-by-placeholder-text "prevents") {:key " "})) + "returns false when a handler calls preventDefault (options arity)")) diff --git a/src/test/react_testing_library_cljs/mocks_test.cljs b/src/test/react_testing_library_cljs/mocks_test.cljs index 310b5cf..35f1e2d 100644 --- a/src/test/react_testing_library_cljs/mocks_test.cljs +++ b/src/test/react_testing_library_cljs/mocks_test.cljs @@ -1,37 +1,41 @@ (ns react-testing-library-cljs.mocks-test (:require - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.fire-event :as fire-event] [react-testing-library-cljs.mocks :as mocks] [react-testing-library-cljs.reagent.render :as render] [react-testing-library-cljs.screen :as screen])) (deftest create-test - (testing "create returns a [calls handler reset!] triple" - (let [[handler calls reset!] (mocks/create)] - (is (= [] @calls)) + (let [[handler calls reset!] (mocks/create)] + (is (= [] @calls) + "starts with no recorded calls") - (handler "arg1") - (is (= ["arg1"] @calls)) + (handler "arg1") + (is (= ["arg1"] @calls) + "records the first call's args") - (handler "arg2") - (is (= ["arg1" "arg2"] @calls)) + (handler "arg2") + (is (= ["arg1" "arg2"] @calls) + "appends subsequent calls") - (reset!) - (is (= [] @calls))))) + (reset!) + (is (= [] @calls) + "reset! clears the recorded calls"))) (deftest multiple-mocks-are-independent - (testing "separate mocks do not share state" - (let [[handler-a calls-a _] (mocks/create) - [handler-b calls-b _] (mocks/create)] - (handler-a "a") - (handler-b "b") - (is (= ["a"] @calls-a)) - (is (= ["b"] @calls-b))))) + (let [[handler-a calls-a _] (mocks/create) + [handler-b calls-b _] (mocks/create)] + (handler-a "a") + (handler-b "b") + (is (= ["a"] @calls-a) + "separate mocks do not share state") + (is (= ["b"] @calls-b) + "separate mocks do not share state"))) (deftest tracks-button-click - (testing "a mock handler wired to a rendered button records clicks" - (let [[on-click calls] (mocks/create)] - (render/render! [:button {:on-click on-click} "Submit"]) - (fire-event/click (screen/get-by-text "Submit")) - (is (= 1 (count @calls)))))) + (let [[on-click calls] (mocks/create)] + (render/render! [:button {:on-click on-click} "Submit"]) + (fire-event/click (screen/get-by-text "Submit")) + (is (= 1 (count @calls)) + "a mock handler wired to a rendered button records clicks"))) diff --git a/src/test/react_testing_library_cljs/reagent/fire_event_test.cljs b/src/test/react_testing_library_cljs/reagent/fire_event_test.cljs index bd17a74..8c8c091 100644 --- a/src/test/react_testing_library_cljs/reagent/fire_event_test.cljs +++ b/src/test/react_testing_library_cljs/reagent/fire_event_test.cljs @@ -1,54 +1,56 @@ (ns react-testing-library-cljs.reagent.fire-event-test (:require - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.reagent.fire-event :as fire-event] [react-testing-library-cljs.reagent.render :refer [render! act]] [react-testing-library-cljs.screen :as screen] [reagent.core :as r])) (deftest click-triggers-re-render - (testing "clicking a button updates state visibly" - (let [counter (r/atom 0) - component (fn [] [:div - [:span {:data-testid "count"} (str @counter)] - [:button {:on-click #(swap! counter inc)} "Inc"]])] - (render! [component]) - (is (= "0" (.-textContent (screen/get-by-test-id "count")))) - (act #(fire-event/click (screen/get-by-text "Inc"))) - (is (= "1" (.-textContent (screen/get-by-test-id "count"))))))) + (let [counter (r/atom 0) + component (fn [] [:div + [:span {:data-testid "count"} (str @counter)] + [:button {:on-click #(swap! counter inc)} "Inc"]])] + (render! [component]) + (is (= "0" (.-textContent (screen/get-by-test-id "count"))) + "renders the initial count") + (act #(fire-event/click (screen/get-by-text "Inc"))) + (is (= "1" (.-textContent (screen/get-by-test-id "count"))) + "clicking a button updates state visibly"))) (deftest change-triggers-re-render - (testing "changing an input updates state visibly" - (let [value (r/atom "") - component (fn [] [:div - [:input {:data-testid "input" - :value @value - :on-change #(reset! value (.. % -target -value))}] - [:span {:data-testid "display"} @value]])] - (render! [component]) - (is (= "" (.-textContent (screen/get-by-test-id "display")))) - (act #(fire-event/change (screen/get-by-test-id "input") {:target {:value "hello"}})) - (is (= "hello" (.-textContent (screen/get-by-test-id "display"))))))) + (let [value (r/atom "") + component (fn [] [:div + [:input {:data-testid "input" + :value @value + :on-change #(reset! value (.. % -target -value))}] + [:span {:data-testid "display"} @value]])] + (render! [component]) + (is (= "" (.-textContent (screen/get-by-test-id "display"))) + "renders the initial empty value") + (act #(fire-event/change (screen/get-by-test-id "input") {:target {:value "hello"}})) + (is (= "hello" (.-textContent (screen/get-by-test-id "display"))) + "changing an input updates state visibly"))) (deftest key-down-returns-default-prevented-boolean - (testing "returns true when nothing calls preventDefault (single arity)" - (let [component (fn [] [:input {:data-testid "plain"}])] - (render! [component]) - (is (true? (fire-event/key-down (screen/get-by-test-id "plain")))))) + (let [component (fn [] [:input {:data-testid "plain"}])] + (render! [component]) + (is (true? (fire-event/key-down (screen/get-by-test-id "plain"))) + "returns true when nothing calls preventDefault (single arity)")) - (testing "returns true when nothing calls preventDefault (options arity)" - (let [component (fn [] [:input {:data-testid "plain"}])] - (render! [component]) - (is (true? (fire-event/key-down (screen/get-by-test-id "plain") {:key " "}))))) + (let [component (fn [] [:input {:data-testid "plain"}])] + (render! [component]) + (is (true? (fire-event/key-down (screen/get-by-test-id "plain") {:key " "})) + "returns true when nothing calls preventDefault (options arity)")) - (testing "returns false when a handler calls preventDefault (single arity)" - (let [component (fn [] [:input {:data-testid "prevents" - :on-key-down #(.preventDefault %)}])] - (render! [component]) - (is (false? (fire-event/key-down (screen/get-by-test-id "prevents")))))) + (let [component (fn [] [:input {:data-testid "prevents" + :on-key-down #(.preventDefault %)}])] + (render! [component]) + (is (false? (fire-event/key-down (screen/get-by-test-id "prevents"))) + "returns false when a handler calls preventDefault (single arity)")) - (testing "returns false when a handler calls preventDefault (options arity)" - (let [component (fn [] [:input {:data-testid "prevents" - :on-key-down #(.preventDefault %)}])] - (render! [component]) - (is (false? (fire-event/key-down (screen/get-by-test-id "prevents") {:key " "})))))) + (let [component (fn [] [:input {:data-testid "prevents" + :on-key-down #(.preventDefault %)}])] + (render! [component]) + (is (false? (fire-event/key-down (screen/get-by-test-id "prevents") {:key " "})) + "returns false when a handler calls preventDefault (options arity)"))) diff --git a/src/test/react_testing_library_cljs/reagent/render_test.cljs b/src/test/react_testing_library_cljs/reagent/render_test.cljs index 556b406..6f94704 100644 --- a/src/test/react_testing_library_cljs/reagent/render_test.cljs +++ b/src/test/react_testing_library_cljs/reagent/render_test.cljs @@ -1,24 +1,26 @@ (ns react-testing-library-cljs.reagent.render-test (:require - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.reagent.render :refer [render! act]] [react-testing-library-cljs.screen :as screen] [reagent.core :as r])) (deftest render!-test - (testing "renders hiccup to the DOM" - (render! [:div "Hello from Reagent"]) - (let [el (screen/get-by-text "Hello from Reagent")] - (is (some? el)) - (is (= "Hello from Reagent" (.-textContent el)))))) + (render! [:div "Hello from Reagent"]) + (let [el (screen/get-by-text "Hello from Reagent")] + (is (some? el) + "renders hiccup to the DOM") + (is (= "Hello from Reagent" (.-textContent el)) + "renders the expected text content"))) (deftest act-test - (testing "act flushes reagent state changes" - (let [counter (r/atom 0) - component (fn [] [:div - [:span {:data-testid "r-count"} (str @counter)] - [:button {:on-click #(swap! counter inc)} "Inc"]])] - (render! [component]) - (is (= "0" (.-textContent (screen/get-by-test-id "r-count")))) - (act #(swap! counter inc)) - (is (= "1" (.-textContent (screen/get-by-test-id "r-count"))))))) + (let [counter (r/atom 0) + component (fn [] [:div + [:span {:data-testid "r-count"} (str @counter)] + [:button {:on-click #(swap! counter inc)} "Inc"]])] + (render! [component]) + (is (= "0" (.-textContent (screen/get-by-test-id "r-count"))) + "renders the initial state") + (act #(swap! counter inc)) + (is (= "1" (.-textContent (screen/get-by-test-id "r-count"))) + "act flushes reagent state changes"))) diff --git a/src/test/react_testing_library_cljs/screen_test.cljs b/src/test/react_testing_library_cljs/screen_test.cljs index 08fe646..b8e6326 100644 --- a/src/test/react_testing_library_cljs/screen_test.cljs +++ b/src/test/react_testing_library_cljs/screen_test.cljs @@ -1,7 +1,7 @@ (ns react-testing-library-cljs.screen-test (:require ["react" :as react] - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.render :as rtl] [react-testing-library-cljs.screen :as screen])) @@ -9,65 +9,71 @@ (rtl/render element)) (deftest get-by-text-test - (testing "returns the matching element" - (render-el (react/createElement "div" nil "Hello World")) - (let [el (screen/get-by-text "Hello World")] - (is (some? el)) - (is (= "Hello World" (.-textContent el))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil "Hello World")) + (let [el (screen/get-by-text "Hello World")] + (is (some? el) + "returns the matching element") + (is (= "Hello World" (.-textContent el)) + "returns the element with the expected text")) - (testing "throws when element is not found" - (rtl/cleanup) - (render-el (react/createElement "div" nil "Hello")) - (is (thrown? js/Error (screen/get-by-text "Does not exist"))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil "Hello")) + (is (thrown? js/Error (screen/get-by-text "Does not exist")) + "throws when element is not found")) (deftest query-by-text-test - (testing "returns the element when found" - (rtl/cleanup) - (render-el (react/createElement "div" nil "Query Target")) - (let [el (screen/query-by-text "Query Target")] - (is (some? el)) - (is (= "Query Target" (.-textContent el))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil "Query Target")) + (let [el (screen/query-by-text "Query Target")] + (is (some? el) + "returns the element when found") + (is (= "Query Target" (.-textContent el)) + "returns the element with the expected text")) - (testing "returns nil when not found" - (rtl/cleanup) - (render-el (react/createElement "div" nil "Something")) - (is (nil? (screen/query-by-text "Not Here"))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil "Something")) + (is (nil? (screen/query-by-text "Not Here")) + "returns nil when not found")) (deftest get-all-by-text-test - (testing "returns a vector of matching elements" - (rtl/cleanup) - (render-el (react/createElement "div" nil - (react/createElement "span" nil "Item") - (react/createElement "span" nil "Item"))) - (let [els (screen/get-all-by-text "Item")] - (is (vector? els)) - (is (= 2 (count els)))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil + (react/createElement "span" nil "Item") + (react/createElement "span" nil "Item"))) + (let [els (screen/get-all-by-text "Item")] + (is (vector? els) + "returns a vector") + (is (= 2 (count els)) + "returns all matching elements"))) (deftest get-by-role-test - (testing "returns element by role" - (rtl/cleanup) - (render-el (react/createElement "button" nil "Click me")) - (let [el (screen/get-by-role "button")] - (is (some? el)) - (is (= "Click me" (.-textContent el)))))) + (rtl/cleanup) + (render-el (react/createElement "button" nil "Click me")) + (let [el (screen/get-by-role "button")] + (is (some? el) + "returns element by role") + (is (= "Click me" (.-textContent el)) + "returns the element with the expected text"))) (deftest query-by-role-test - (testing "returns nil when role not found" - (rtl/cleanup) - (render-el (react/createElement "div" nil "No button")) - (is (nil? (screen/query-by-role "button"))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil "No button")) + (is (nil? (screen/query-by-role "button")) + "returns nil when role not found")) (deftest get-by-test-id-test - (testing "returns element by data-testid" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:data-testid "my-id"} "Test ID")) - (let [el (screen/get-by-test-id "my-id")] - (is (some? el)) - (is (= "Test ID" (.-textContent el)))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:data-testid "my-id"} "Test ID")) + (let [el (screen/get-by-test-id "my-id")] + (is (some? el) + "returns element by data-testid") + (is (= "Test ID" (.-textContent el)) + "returns the element with the expected text"))) (deftest get-by-placeholder-text-test - (testing "returns input by placeholder" - (rtl/cleanup) - (render-el (react/createElement "input" #js {:placeholder "Enter name"})) - (let [el (screen/get-by-placeholder-text "Enter name")] - (is (some? el))))) + (rtl/cleanup) + (render-el (react/createElement "input" #js {:placeholder "Enter name"})) + (let [el (screen/get-by-placeholder-text "Enter name")] + (is (some? el) + "returns input by placeholder"))) diff --git a/src/test/react_testing_library_cljs/within_test.cljs b/src/test/react_testing_library_cljs/within_test.cljs index 611894f..2ac3a09 100644 --- a/src/test/react_testing_library_cljs/within_test.cljs +++ b/src/test/react_testing_library_cljs/within_test.cljs @@ -1,7 +1,7 @@ (ns react-testing-library-cljs.within-test (:require ["react" :as react] - [cljs.test :refer [deftest is testing]] + [cljs.test :refer [deftest is]] [react-testing-library-cljs.render :as rtl] [react-testing-library-cljs.screen :as screen] [react-testing-library-cljs.within :as within])) @@ -10,102 +10,105 @@ (rtl/render element)) (deftest get-by-role-test - (testing "returns element within scope" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:role "region"} - (react/createElement "button" nil "Inside"))) - (let [region (screen/get-by-role "region") - btn (within/get-by-role region "button")] - (is (some? btn)) - (is (= "Inside" (.-textContent btn))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:role "region"} + (react/createElement "button" nil "Inside"))) + (let [region (screen/get-by-role "region") + btn (within/get-by-role region "button")] + (is (some? btn) + "returns element within scope") + (is (= "Inside" (.-textContent btn)) + "returns the scoped element's text")) - (testing "scopes query — does not find element outside" - (rtl/cleanup) - (render-el (react/createElement "div" nil - (react/createElement "div" #js {:role "region"} - (react/createElement "button" nil "Inside")) - (react/createElement "button" nil "Outside"))) - (let [region (screen/get-by-role "region")] - (is (thrown? js/Error (within/get-by-role region "button" {:name "Outside"}))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil + (react/createElement "div" #js {:role "region"} + (react/createElement "button" nil "Inside")) + (react/createElement "button" nil "Outside"))) + (let [region (screen/get-by-role "region")] + (is (thrown? js/Error (within/get-by-role region "button" {:name "Outside"})) + "scopes query — does not find element outside")) - (testing "supports options map" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:role "region"} - (react/createElement "button" nil "Submit"))) - (let [region (screen/get-by-role "region") - btn (within/get-by-role region "button" {:name "Submit"})] - (is (some? btn))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:role "region"} + (react/createElement "button" nil "Submit"))) + (let [region (screen/get-by-role "region") + btn (within/get-by-role region "button" {:name "Submit"})] + (is (some? btn) + "supports an options map"))) (deftest query-by-role-test - (testing "returns nil when element not found within scope" - (rtl/cleanup) - (render-el (react/createElement "div" nil - (react/createElement "div" #js {:role "region"} "no button here") - (react/createElement "button" nil "Outside"))) - (let [region (screen/get-by-role "region")] - (is (nil? (within/query-by-role region "button")))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil + (react/createElement "div" #js {:role "region"} "no button here") + (react/createElement "button" nil "Outside"))) + (let [region (screen/get-by-role "region")] + (is (nil? (within/query-by-role region "button")) + "returns nil when element not found within scope"))) (deftest get-all-by-role-test - (testing "returns vector of elements within scope" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:role "region"} - (react/createElement "button" nil "One") - (react/createElement "button" nil "Two"))) - (let [region (screen/get-by-role "region") - btns (within/get-all-by-role region "button")] - (is (vector? btns)) - (is (= 2 (count btns))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:role "region"} + (react/createElement "button" nil "One") + (react/createElement "button" nil "Two"))) + (let [region (screen/get-by-role "region") + btns (within/get-all-by-role region "button")] + (is (vector? btns) + "returns a vector of elements within scope") + (is (= 2 (count btns)) + "returns all scoped elements")) - (testing "does not include elements outside scope" - (rtl/cleanup) - (render-el (react/createElement "div" nil - (react/createElement "div" #js {:role "region"} - (react/createElement "button" nil "One")) - (react/createElement "button" nil "Outside"))) - (let [region (screen/get-by-role "region") - btns (within/get-all-by-role region "button")] - (is (= 1 (count btns)))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil + (react/createElement "div" #js {:role "region"} + (react/createElement "button" nil "One")) + (react/createElement "button" nil "Outside"))) + (let [region (screen/get-by-role "region") + btns (within/get-all-by-role region "button")] + (is (= 1 (count btns)) + "does not include elements outside scope"))) (deftest query-all-by-role-test - (testing "returns empty vector when no elements found within scope" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:role "region"} "no buttons")) - (let [region (screen/get-by-role "region")] - (is (= [] (within/query-all-by-role region "button")))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:role "region"} "no buttons")) + (let [region (screen/get-by-role "region")] + (is (= [] (within/query-all-by-role region "button")) + "returns empty vector when no elements found within scope"))) (deftest get-by-text-test - (testing "returns element with matching text within scope" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:role "region"} - (react/createElement "span" nil "Hello"))) - (let [region (screen/get-by-role "region") - el (within/get-by-text region "Hello")] - (is (some? el)) - (is (= "Hello" (.-textContent el))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:role "region"} + (react/createElement "span" nil "Hello"))) + (let [region (screen/get-by-role "region") + el (within/get-by-text region "Hello")] + (is (some? el) + "returns element with matching text within scope") + (is (= "Hello" (.-textContent el)) + "returns the scoped element's text")) - (testing "scopes query — does not find text outside" - (rtl/cleanup) - (render-el (react/createElement "div" nil - (react/createElement "div" #js {:role "region"} - (react/createElement "span" nil "Inside")) - (react/createElement "span" nil "Outside"))) - (let [region (screen/get-by-role "region")] - (is (nil? (within/query-by-text region "Outside")))))) + (rtl/cleanup) + (render-el (react/createElement "div" nil + (react/createElement "div" #js {:role "region"} + (react/createElement "span" nil "Inside")) + (react/createElement "span" nil "Outside"))) + (let [region (screen/get-by-role "region")] + (is (nil? (within/query-by-text region "Outside")) + "scopes query — does not find text outside"))) (deftest get-by-test-id-test - (testing "returns element by test id within scope" - (rtl/cleanup) - (render-el (react/createElement "div" #js {:role "region"} - (react/createElement "span" #js {:data-testid "my-id"} "content"))) - (let [region (screen/get-by-role "region") - el (within/get-by-test-id region "my-id")] - (is (some? el))))) + (rtl/cleanup) + (render-el (react/createElement "div" #js {:role "region"} + (react/createElement "span" #js {:data-testid "my-id"} "content"))) + (let [region (screen/get-by-role "region") + el (within/get-by-test-id region "my-id")] + (is (some? el) + "returns element by test id within scope"))) (deftest get-by-placeholder-text-test - (testing "returns input by placeholder within scope" - (rtl/cleanup) - (render-el (react/createElement "form" #js {:aria-label "search form"} - (react/createElement "input" #js {:placeholder "Enter name"}))) - (let [form (screen/get-by-role "form") - el (within/get-by-placeholder-text form "Enter name")] - (is (some? el))))) + (rtl/cleanup) + (render-el (react/createElement "form" #js {:aria-label "search form"} + (react/createElement "input" #js {:placeholder "Enter name"}))) + (let [form (screen/get-by-role "form") + el (within/get-by-placeholder-text form "Enter name")] + (is (some? el) + "returns input by placeholder within scope")))