From 43185fa57f91001c4fe1a7135bc538ae0855b41b Mon Sep 17 00:00:00 2001 From: Rhys Powell Date: Wed, 30 Aug 2017 08:27:24 +1000 Subject: [PATCH] add some basic tests --- bsconfig.json | 7 ++-- package-lock.json | 13 +++++++ package.json | 22 ++++------- src/__tests__/DummyComponent.re | 24 ++++++++++++ src/__tests__/DummyComponent_test.re | 57 ++++++++++++++++++++++++++++ 5 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 src/__tests__/DummyComponent.re create mode 100644 src/__tests__/DummyComponent_test.re diff --git a/bsconfig.json b/bsconfig.json index 03d3867..5ab23fc 100644 --- a/bsconfig.json +++ b/bsconfig.json @@ -1,7 +1,8 @@ { - "name": "bs-jest", + "name": "bs-enzyme", + "reason": { "react-jsx": 2 }, "bs-dependencies": ["reason-react"], - "bs-dev-dependencies": ["bs-jest", "bs-enzyme"], + "bs-dev-dependencies": ["bs-jest"], "bsc-flags": ["-bs-super-errors"], - "sources": [{ "dir": "src" }] + "sources": [{ "dir": "src" }, { "dir": "src/__tests__", "type": "dev" }] } diff --git a/package-lock.json b/package-lock.json index 7a44838..aebe042 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3064,6 +3064,19 @@ } } }, + "react": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/react/-/react-15.6.1.tgz", + "integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98=", + "dev": true, + "requires": { + "create-react-class": "15.6.0", + "fbjs": "0.8.14", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } + }, "react-dom": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.1.tgz", diff --git a/package.json b/package.json index 50ca63e..9a082bd 100644 --- a/package.json +++ b/package.json @@ -3,18 +3,16 @@ "version": "0.1.1", "description": "Bucklescript bindings for Enzyme", "scripts": { - "test": "jest", - "build": "bsb -make-world" + "test": "jest --watch", + "build": "bsb -make-world", + "watch": "bsb -make-world -w", + "clean": "bsb -clean-world" }, "repository": { "type": "git", "url": "git+https://github.com/rpowelll/bs-enzyme.git" }, - "keywords": [ - "bucklescript", - "enzyme", - "testing" - ], + "keywords": ["bucklescript", "enzyme", "testing"], "author": "Rhys Powell", "license": "MIT", "bugs": { @@ -25,6 +23,7 @@ "bs-jest": "^0.1.0", "bs-platform": "^1.9.1", "jest": "^20.0.4", + "react": "^15.6.1", "reason-react": "^0.2.3" }, "dependencies": { @@ -37,13 +36,6 @@ "bs-platform": ">=1.9.0" }, "jest": { - "moduleFileExtensions": [ - "re", - "js", - "ml" - ], - "testMatch": [ - "lib/js/src/**/*_test.re" - ] + "testMatch": ["**/src/**/*_test.js"] } } diff --git a/src/__tests__/DummyComponent.re b/src/__tests__/DummyComponent.re new file mode 100644 index 0000000..8a38935 --- /dev/null +++ b/src/__tests__/DummyComponent.re @@ -0,0 +1,24 @@ +type state = { + clicked: bool +}; +let se = ReasonReact.stringToElement; +let component = ReasonReact.statefulComponent "DummyComponent"; + +let make title::title handleClick::handleClick _children => { + ...component, + initialState: fun () => { + clicked: false + }, + render: fun {state} => { +
+ +
+ +
+
+ } +} diff --git a/src/__tests__/DummyComponent_test.re b/src/__tests__/DummyComponent_test.re new file mode 100644 index 0000000..9e1c39d --- /dev/null +++ b/src/__tests__/DummyComponent_test.re @@ -0,0 +1,57 @@ +open Jest; + +let setup ::title="Test" ::handleClick=(fun _evt => ()) () => + Enzyme.shallow ; + +let header wrapper => + wrapper + |> Enzyme.find "#header" + |> Enzyme.first; + +describe "DummyComponent" (fun () => { + open Expect; + + test "renders a #header" (fun () => { + let title = "A test title"; + let wrapper = setup title::title (); + let headerNodes = wrapper |> header; + + expect (Enzyme.length headerNodes) |> toBe 1; + }); + + test "has the expected title in the #header" (fun () => { + let title = "A test title"; + let wrapper = setup title::title (); + let headerText = wrapper |> header |> Enzyme.text; + + expect headerText |> toContainString title; + }); + + test "has the expected h1 tag in the #header" (fun () => { + let title = "A test title"; + let wrapper = setup title::title (); + let expectedNode =

(ReasonReact.stringToElement title)

; + + expect (Enzyme.contains expectedNode wrapper) |> toBe true; + }); + + test "has the expected #header" (fun () => { + let title = "A test title"; + let wrapper = setup title::title (); + let header = header wrapper; + let expectedNode = ; + + expect (Enzyme.equals expectedNode header) |> toBe true; + }); + + test "has the expected initialState" (fun () => { + let title = "A test title"; + let wrapper = setup title::title (); + let state = Enzyme.state wrapper; + Js.log state; + + expect state##reasonState |> toContain 0; + }); +});