2 Commits
Author SHA1 Message Date
Christophe Porteneuve 3359972679 Fin P5Ch6 - Snapshots 2017-12-08 16:13:49 +01:00
Christophe Porteneuve 3a13416399 Fin P5Ch5 - Événements 2017-12-08 16:00:12 +01:00
8 changed files with 510 additions and 3 deletions
+178
View File
@@ -1590,6 +1590,82 @@
"jest-matcher-utils": "20.0.3"
}
},
"chai-jest-snapshot": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chai-jest-snapshot/-/chai-jest-snapshot-2.0.0.tgz",
"integrity": "sha512-u8jZZjw/0G1t5A8wDfH6K7DAVfMg3g0dsw9wKQURNUyrZX96VojHNrFMmLirq1m0kOvC5icgL/Qh/fu1MZyvUw==",
"dev": true,
"requires": {
"jest-snapshot": "21.2.1",
"lodash.values": "4.3.0"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"chalk": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
"integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
"dev": true,
"requires": {
"ansi-styles": "3.2.0",
"escape-string-regexp": "1.0.5",
"supports-color": "4.5.0"
}
},
"jest-diff": {
"version": "21.2.1",
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-21.2.1.tgz",
"integrity": "sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA==",
"dev": true,
"requires": {
"chalk": "2.3.0",
"diff": "3.4.0",
"jest-get-type": "21.2.0",
"pretty-format": "21.2.1"
}
},
"jest-matcher-utils": {
"version": "21.2.1",
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz",
"integrity": "sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg==",
"dev": true,
"requires": {
"chalk": "2.3.0",
"jest-get-type": "21.2.0",
"pretty-format": "21.2.1"
}
},
"jest-snapshot": {
"version": "21.2.1",
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-21.2.1.tgz",
"integrity": "sha512-bpaeBnDpdqaRTzN8tWg0DqOTo2DvD3StOemxn67CUd1p1Po+BUpvePAp44jdJ7Pxcjfg+42o4NHw1SxdCA2rvg==",
"dev": true,
"requires": {
"chalk": "2.3.0",
"jest-diff": "21.2.1",
"jest-matcher-utils": "21.2.1",
"mkdirp": "0.5.1",
"natural-compare": "1.4.0",
"pretty-format": "21.2.1"
}
},
"pretty-format": {
"version": "21.2.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz",
"integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==",
"dev": true,
"requires": {
"ansi-regex": "3.0.0",
"ansi-styles": "3.2.0"
}
}
}
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -2723,6 +2799,15 @@
"prop-types": "15.6.0"
}
},
"enzyme-to-json": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.2.2.tgz",
"integrity": "sha512-Paym79t9PFsTxvazN5+k9aZfoZO+lul/qDLspL1UlNwhbg+RUczVuuP4SO/RZ/sFRxal3dPCl+5VmqtCE1bxBw==",
"dev": true,
"requires": {
"lodash": "4.17.4"
}
},
"errno": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
@@ -3602,6 +3687,15 @@
"mime-types": "2.1.17"
}
},
"formatio": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
"integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
"dev": true,
"requires": {
"samsam": "1.3.0"
}
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -5583,6 +5677,12 @@
"jest-util": "20.0.3"
}
},
"jest-get-type": {
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz",
"integrity": "sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==",
"dev": true
},
"jest-haste-map": {
"version": "20.0.5",
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.0.5.tgz",
@@ -5867,6 +5967,12 @@
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
"integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE="
},
"just-extend": {
"version": "1.1.27",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz",
"integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==",
"dev": true
},
"killable": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz",
@@ -6041,6 +6147,12 @@
"integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
"dev": true
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -6073,11 +6185,23 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
},
"lodash.values": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz",
"integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=",
"dev": true
},
"loglevel": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.0.tgz",
"integrity": "sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ="
},
"lolex": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.1.tgz",
"integrity": "sha512-mQuW55GhduF3ppo+ZRUTz1PRjEh1hS5BbqU7d8D0ez2OKxHDod7StPPeAVKisZR5aLkHZjdGWSL42LSONUJsZw==",
"dev": true
},
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -6380,6 +6504,27 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
"nise": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/nise/-/nise-1.2.0.tgz",
"integrity": "sha512-q9jXh3UNsMV28KeqI43ILz5+c3l+RiNW8mhurEwCKckuHQbL+hTJIKKTiUlCPKlgQ/OukFvSnKB/Jk3+sFbkGA==",
"dev": true,
"requires": {
"formatio": "1.2.0",
"just-extend": "1.1.27",
"lolex": "1.6.0",
"path-to-regexp": "1.7.0",
"text-encoding": "0.6.4"
},
"dependencies": {
"lolex": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
"integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
"dev": true
}
}
},
"no-case": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
@@ -9124,6 +9269,12 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
"samsam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
"integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
"dev": true
},
"sane": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz",
@@ -9320,6 +9471,27 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"sinon": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.3.tgz",
"integrity": "sha512-c7u0ZuvBRX1eXuB4jN3BRCAOGiUTlM8SE3TxbJHrNiHUKL7wonujMOB6Fi1gQc00U91IscFORQHDga/eccqpbw==",
"dev": true,
"requires": {
"diff": "3.4.0",
"formatio": "1.2.0",
"lodash.get": "4.4.2",
"lolex": "2.3.1",
"nise": "1.2.0",
"supports-color": "4.5.0",
"type-detect": "4.0.5"
}
},
"sinon-chai": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz",
"integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==",
"dev": true
},
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -9705,6 +9877,12 @@
"require-main-filename": "1.0.1"
}
},
"text-encoding": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
"integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
"dev": true
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+5 -1
View File
@@ -19,14 +19,18 @@
"chai": "^4.1.2",
"chai-enzyme": "^1.0.0-beta.0",
"chai-jest-diff": "^1.0.1",
"chai-jest-snapshot": "^2.0.0",
"dirty-chai": "^2.0.1",
"enzyme": "^3.2.0",
"enzyme-adapter-react-16": "^1.1.0",
"enzyme-to-json": "^3.2.2",
"eslint-config-prettier": "^2.6.0",
"eslint-config-react-app": "^2.0.1",
"eslint-plugin-prettier": "^2.3.1",
"prettier": "^1.7.4",
"react-test-renderer": "^16.2.0"
"react-test-renderer": "^16.2.0",
"sinon": "^4.1.3",
"sinon-chai": "^2.14.0"
},
"prettier": {
"semi": false,
+1 -1
View File
@@ -9,7 +9,7 @@ import HallOfFame, { FAKE_HOF } from './HallOfFame'
import HighScoreInput from './HighScoreInput'
const SIDE = 6
const SYMBOLS = '😀🎉💖🎩🐶🐱🦄🐬🌍🌛🌞💫🍎🍌🍓🍐🍟🍿'
export const SYMBOLS = '😀🎉💖🎩🐶🐱🦄🐬🌍🌛🌞💫🍎🍌🍓🍐🍟🍿'
const VISUAL_PAUSE_MSECS = 750
class App extends Component {
+15 -1
View File
@@ -1,8 +1,9 @@
import { expect } from 'chai'
import React from 'react'
import { shallow } from 'enzyme'
import sinon from 'sinon'
import App from './App'
import App, { SYMBOLS } from './App'
import GuessCount from './GuessCount'
describe('<App/>', () => {
@@ -20,4 +21,17 @@ describe('<App/>', () => {
const wrapper = shallow(<App />)
expect(wrapper.find('Card')).to.have.length(36)
})
it('should match its reference snapshot', () => {
const mock = sinon
.stub(App.prototype, 'generateCards')
.returns([...SYMBOLS.repeat(2)])
try {
const wrapper = shallow(<App />)
expect(wrapper).to.matchSnapshot()
} finally {
mock.restore()
}
})
})
+27
View File
@@ -0,0 +1,27 @@
import { expect } from 'chai'
import React from 'react'
import { shallow } from 'enzyme'
import sinon from 'sinon'
import Card from './Card'
describe('<Card/>', () => {
it('should trigger its `onClick` prop when clicked', () => {
const onClick = sinon.spy()
const wrapper = shallow(
<Card card="😁" feedback="hidden" index={0} onClick={onClick} />
)
wrapper.simulate('click')
expect(onClick).to.have.been.calledWith(0)
})
it('should match its reference snapshot', () => {
const onClick = sinon.spy()
const wrapper = shallow(
<Card card="😁" feedback="hidden" index={0} onClick={onClick} />
)
expect(wrapper).to.matchSnapshot()
})
})
+263
View File
@@ -0,0 +1,263 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<App/> should match its reference snapshot 1`] = `
<div
className="memory"
>
<GuessCount
guesses={0}
/>
<Card
card="😀"
feedback="hidden"
index={0}
key="0"
onClick={[Function]}
/>
<Card
card="🎉"
feedback="hidden"
index={1}
key="1"
onClick={[Function]}
/>
<Card
card="💖"
feedback="hidden"
index={2}
key="2"
onClick={[Function]}
/>
<Card
card="🎩"
feedback="hidden"
index={3}
key="3"
onClick={[Function]}
/>
<Card
card="🐶"
feedback="hidden"
index={4}
key="4"
onClick={[Function]}
/>
<Card
card="🐱"
feedback="hidden"
index={5}
key="5"
onClick={[Function]}
/>
<Card
card="🦄"
feedback="hidden"
index={6}
key="6"
onClick={[Function]}
/>
<Card
card="🐬"
feedback="hidden"
index={7}
key="7"
onClick={[Function]}
/>
<Card
card="🌍"
feedback="hidden"
index={8}
key="8"
onClick={[Function]}
/>
<Card
card="🌛"
feedback="hidden"
index={9}
key="9"
onClick={[Function]}
/>
<Card
card="🌞"
feedback="hidden"
index={10}
key="10"
onClick={[Function]}
/>
<Card
card="💫"
feedback="hidden"
index={11}
key="11"
onClick={[Function]}
/>
<Card
card="🍎"
feedback="hidden"
index={12}
key="12"
onClick={[Function]}
/>
<Card
card="🍌"
feedback="hidden"
index={13}
key="13"
onClick={[Function]}
/>
<Card
card="🍓"
feedback="hidden"
index={14}
key="14"
onClick={[Function]}
/>
<Card
card="🍐"
feedback="hidden"
index={15}
key="15"
onClick={[Function]}
/>
<Card
card="🍟"
feedback="hidden"
index={16}
key="16"
onClick={[Function]}
/>
<Card
card="🍿"
feedback="hidden"
index={17}
key="17"
onClick={[Function]}
/>
<Card
card="😀"
feedback="hidden"
index={18}
key="18"
onClick={[Function]}
/>
<Card
card="🎉"
feedback="hidden"
index={19}
key="19"
onClick={[Function]}
/>
<Card
card="💖"
feedback="hidden"
index={20}
key="20"
onClick={[Function]}
/>
<Card
card="🎩"
feedback="hidden"
index={21}
key="21"
onClick={[Function]}
/>
<Card
card="🐶"
feedback="hidden"
index={22}
key="22"
onClick={[Function]}
/>
<Card
card="🐱"
feedback="hidden"
index={23}
key="23"
onClick={[Function]}
/>
<Card
card="🦄"
feedback="hidden"
index={24}
key="24"
onClick={[Function]}
/>
<Card
card="🐬"
feedback="hidden"
index={25}
key="25"
onClick={[Function]}
/>
<Card
card="🌍"
feedback="hidden"
index={26}
key="26"
onClick={[Function]}
/>
<Card
card="🌛"
feedback="hidden"
index={27}
key="27"
onClick={[Function]}
/>
<Card
card="🌞"
feedback="hidden"
index={28}
key="28"
onClick={[Function]}
/>
<Card
card="💫"
feedback="hidden"
index={29}
key="29"
onClick={[Function]}
/>
<Card
card="🍎"
feedback="hidden"
index={30}
key="30"
onClick={[Function]}
/>
<Card
card="🍌"
feedback="hidden"
index={31}
key="31"
onClick={[Function]}
/>
<Card
card="🍓"
feedback="hidden"
index={32}
key="32"
onClick={[Function]}
/>
<Card
card="🍐"
feedback="hidden"
index={33}
key="33"
onClick={[Function]}
/>
<Card
card="🍟"
feedback="hidden"
index={34}
key="34"
onClick={[Function]}
/>
<Card
card="🍿"
feedback="hidden"
index={35}
key="35"
onClick={[Function]}
/>
</div>
`;
+14
View File
@@ -0,0 +1,14 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<Card/> should match its reference snapshot 1`] = `
<div
className="card hidden"
onClick={[Function]}
>
<span
className="symbol"
>
❓
</span>
</div>
`;
+7
View File
@@ -1,13 +1,20 @@
import Adapter from 'enzyme-adapter-react-16'
import chai from 'chai'
import { configure as configureEnzyme } from 'enzyme'
import chaiJestSnapshot from 'chai-jest-snapshot'
import createChaiEnzyme from 'chai-enzyme'
import createChaiJestDiff from 'chai-jest-diff'
import dirtyChai from 'dirty-chai'
import enzymeToJSON from 'enzyme-to-json/serializer'
import sinonChai from 'sinon-chai'
chai
.use(dirtyChai)
.use(createChaiJestDiff())
.use(chaiJestSnapshot)
.use(createChaiEnzyme())
.use(sinonChai)
expect.addSnapshotSerializer(enzymeToJSON)
configureEnzyme({ adapter: new Adapter() })