From e0546481b39aa15b48aadd83de7cf84891ace9de Mon Sep 17 00:00:00 2001 From: Xavier Carpentier Date: Wed, 20 Dec 2017 16:53:33 +0100 Subject: [PATCH] Add Jest tests and Codecov reports (#673) * chore(test): add jest * chore(coverage): add codecov to circleci * chore(vscode): remove vscode from git * chore(test): snapshot all component --- .babelrc | 3 + .npmignore | 2 + .vscode/settings.json | 15 - .watchmanconfig | 6 +- circle.yml | 5 +- package.json | 20 +- src/__tests__/Actions.test.js | 11 + src/__tests__/Avatar.test.js | 11 + src/__tests__/Bubble.test.js | 13 + src/__tests__/Color.test.js | 5 + src/__tests__/Composer.test.js | 11 + src/__tests__/Constant.test.js | 5 + src/__tests__/Day.test.js | 12 + src/__tests__/GiftedAvatar.test.js | 11 + src/__tests__/GiftedChat.test.js | 33 + src/__tests__/InputToolbar.test.js | 11 + src/__tests__/LoadEarlier.test.js | 11 + src/__tests__/Message.test.js | 13 + src/__tests__/MessageContainer.test.js | 11 + src/__tests__/MessageImage.test.js | 11 + src/__tests__/MessageText.test.js | 11 + src/__tests__/Send.test.js | 11 + src/__tests__/SystemMessage.test.js | 11 + src/__tests__/Time.test.js | 12 + .../__snapshots__/Actions.test.js.snap | 67 + .../__snapshots__/Avatar.test.js.snap | 17 + .../__snapshots__/Bubble.test.js.snap | 62 + .../__snapshots__/Color.test.js.snap | 20 + .../__snapshots__/Composer.test.js.snap | 34 + .../__snapshots__/Constant.test.js.snap | 11 + src/__tests__/__snapshots__/Day.test.js.snap | 40 + .../__snapshots__/GiftedAvatar.test.js.snap | 22 + .../__snapshots__/GiftedChat.test.js.snap | 12 + .../__snapshots__/InputToolbar.test.js.snap | 128 + .../__snapshots__/LoadEarlier.test.js.snap | 67 + .../__snapshots__/Message.test.js.snap | 83 + .../MessageContainer.test.js.snap | 29 + .../__snapshots__/MessageImage.test.js.snap | 199 + .../__snapshots__/MessageText.test.js.snap | 62 + src/__tests__/__snapshots__/Send.test.js.snap | 3 + .../__snapshots__/SystemMessage.test.js.snap | 44 + src/__tests__/__snapshots__/Time.test.js.snap | 35 + tests/context.js | 32 + tests/setup.js | 3 + yarn.lock | 3963 ++++++++++++++++- 45 files changed, 5094 insertions(+), 104 deletions(-) create mode 100644 .babelrc delete mode 100644 .vscode/settings.json create mode 100644 src/__tests__/Actions.test.js create mode 100644 src/__tests__/Avatar.test.js create mode 100644 src/__tests__/Bubble.test.js create mode 100644 src/__tests__/Color.test.js create mode 100644 src/__tests__/Composer.test.js create mode 100644 src/__tests__/Constant.test.js create mode 100644 src/__tests__/Day.test.js create mode 100644 src/__tests__/GiftedAvatar.test.js create mode 100644 src/__tests__/GiftedChat.test.js create mode 100644 src/__tests__/InputToolbar.test.js create mode 100644 src/__tests__/LoadEarlier.test.js create mode 100644 src/__tests__/Message.test.js create mode 100644 src/__tests__/MessageContainer.test.js create mode 100644 src/__tests__/MessageImage.test.js create mode 100644 src/__tests__/MessageText.test.js create mode 100644 src/__tests__/Send.test.js create mode 100644 src/__tests__/SystemMessage.test.js create mode 100644 src/__tests__/Time.test.js create mode 100644 src/__tests__/__snapshots__/Actions.test.js.snap create mode 100644 src/__tests__/__snapshots__/Avatar.test.js.snap create mode 100644 src/__tests__/__snapshots__/Bubble.test.js.snap create mode 100644 src/__tests__/__snapshots__/Color.test.js.snap create mode 100644 src/__tests__/__snapshots__/Composer.test.js.snap create mode 100644 src/__tests__/__snapshots__/Constant.test.js.snap create mode 100644 src/__tests__/__snapshots__/Day.test.js.snap create mode 100644 src/__tests__/__snapshots__/GiftedAvatar.test.js.snap create mode 100644 src/__tests__/__snapshots__/GiftedChat.test.js.snap create mode 100644 src/__tests__/__snapshots__/InputToolbar.test.js.snap create mode 100644 src/__tests__/__snapshots__/LoadEarlier.test.js.snap create mode 100644 src/__tests__/__snapshots__/Message.test.js.snap create mode 100644 src/__tests__/__snapshots__/MessageContainer.test.js.snap create mode 100644 src/__tests__/__snapshots__/MessageImage.test.js.snap create mode 100644 src/__tests__/__snapshots__/MessageText.test.js.snap create mode 100644 src/__tests__/__snapshots__/Send.test.js.snap create mode 100644 src/__tests__/__snapshots__/SystemMessage.test.js.snap create mode 100644 src/__tests__/__snapshots__/Time.test.js.snap create mode 100644 tests/context.js create mode 100644 tests/setup.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000..ae09dd2a3 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["react-native"] +} diff --git a/.npmignore b/.npmignore index 5e4f1893a..f07af2a7d 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,5 @@ example/ TODO.md screenshots/ +.babelrc +tests/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 440798e2a..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "typescript.check.tscVersion": false, - "window.zoomLevel": 0, - "javascript.validate.enable": false, - "editor.tabSize": 2, - "files.trimTrailingWhitespace": true, - "workbench.statusBar.visible": true, - "workbench.welcome.enabled": false, - "flow.useNPMPackagedFlow ": true, - "flow.pathToFlow": "./node_modules/flow-bin/cli.js", - "editor.formatOnSave": true, - "prettier.singleQuote": true, - "prettier.trailingComma": "all", - "prettier.semi": true, -} \ No newline at end of file diff --git a/.watchmanconfig b/.watchmanconfig index 51ca5d1c0..e1abed318 100644 --- a/.watchmanconfig +++ b/.watchmanconfig @@ -1,7 +1,3 @@ { - "ignore_dirs": [ - ".git", - "node_modules", - "example" - ] + "ignore_dirs": [".git", "node_modules", "example"] } diff --git a/circle.yml b/circle.yml index 985408024..d67018b94 100644 --- a/circle.yml +++ b/circle.yml @@ -17,9 +17,8 @@ dependencies: test: override: - yarn run lint - # TODO: - yarn run flow - # TODO: - yarn run test -- --coverage - # TODO: - codecov + - yarn run test:coverage + - codecov # TODO: deployment: # release: diff --git a/package.json b/package.json index 8a67a4d73..d553a9784 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,19 @@ "homepage": "https://github.com/FaridSafi/react-native-gifted-chat#readme", "scripts": { "lint": "eslint . --ext .js,.jsx", - "precommit": "yarn lint" + "precommit": "yarn lint", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage" + }, + "jest": { + "preset": "react-native", + "setupFiles": ["./tests/setup.js"] }, "devDependencies": { + "babel": "6.23.0", + "babel-jest": "22.0.3", + "babel-preset-react-native": "4.0.0", "eslint": "^4.9.0", "eslint-config-airbnb": "16.1.0", "eslint-config-cooperka": "0.2.9", @@ -35,7 +45,11 @@ "eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-react": "^7.4.0", "eslint-plugin-react-native": "3.2.0", - "husky": "0.14.3" + "husky": "0.14.3", + "jest": "22.0.3", + "react": "16.2.0", + "react-native": "0.51.0", + "react-test-renderer": "16.2.0" }, "dependencies": { "@expo/react-native-action-sheet": "^1.0.1", @@ -49,4 +63,4 @@ "shallowequal": "1.0.2", "uuid": "3.1.0" } -} \ No newline at end of file +} diff --git a/src/__tests__/Actions.test.js b/src/__tests__/Actions.test.js new file mode 100644 index 000000000..da3ab9446 --- /dev/null +++ b/src/__tests__/Actions.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { Actions } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Avatar.test.js b/src/__tests__/Avatar.test.js new file mode 100644 index 000000000..e36a02f94 --- /dev/null +++ b/src/__tests__/Avatar.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { Avatar } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create( 'renderAvatar'} />).toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Bubble.test.js b/src/__tests__/Bubble.test.js new file mode 100644 index 000000000..5a07189d8 --- /dev/null +++ b/src/__tests__/Bubble.test.js @@ -0,0 +1,13 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { Bubble } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer + .create() + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Color.test.js b/src/__tests__/Color.test.js new file mode 100644 index 000000000..5f4817b87 --- /dev/null +++ b/src/__tests__/Color.test.js @@ -0,0 +1,5 @@ +import Color from '../Color'; + +it('should compare Color with snapshot', () => { + expect(Color).toMatchSnapshot(); +}); diff --git a/src/__tests__/Composer.test.js b/src/__tests__/Composer.test.js new file mode 100644 index 000000000..d62d13fce --- /dev/null +++ b/src/__tests__/Composer.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { Composer } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Constant.test.js b/src/__tests__/Constant.test.js new file mode 100644 index 000000000..e1ae2b3d7 --- /dev/null +++ b/src/__tests__/Constant.test.js @@ -0,0 +1,5 @@ +import * as Constant from '../Constant'; + +it('should compare Constant with snapshot', () => { + expect(Constant).toMatchSnapshot(); +}); diff --git a/src/__tests__/Day.test.js b/src/__tests__/Day.test.js new file mode 100644 index 000000000..5c2e94fb6 --- /dev/null +++ b/src/__tests__/Day.test.js @@ -0,0 +1,12 @@ +import 'react-native'; +import React from 'react'; +import createComponentWithContext from '../../tests/context'; + +import { Day } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const component = createComponentWithContext(); + const tree = component.toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/GiftedAvatar.test.js b/src/__tests__/GiftedAvatar.test.js new file mode 100644 index 000000000..fba027bbd --- /dev/null +++ b/src/__tests__/GiftedAvatar.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { GiftedAvatar } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/GiftedChat.test.js b/src/__tests__/GiftedChat.test.js new file mode 100644 index 000000000..522cf8177 --- /dev/null +++ b/src/__tests__/GiftedChat.test.js @@ -0,0 +1,33 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { GiftedChat } from '../GiftedChat'; + +const messages = [ + { + _id: 1, + text: 'Hello developer', + createdAt: new Date(), + user: { + _id: 2, + name: 'React Native', + }, + }, +]; + +it('should render and compare with snapshot', () => { + const tree = renderer + .create( + {}} + user={{ + _id: 1, + }} + />, + ) + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/InputToolbar.test.js b/src/__tests__/InputToolbar.test.js new file mode 100644 index 000000000..b93ecce98 --- /dev/null +++ b/src/__tests__/InputToolbar.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { InputToolbar } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/LoadEarlier.test.js b/src/__tests__/LoadEarlier.test.js new file mode 100644 index 000000000..027e870e0 --- /dev/null +++ b/src/__tests__/LoadEarlier.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { LoadEarlier } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Message.test.js b/src/__tests__/Message.test.js new file mode 100644 index 000000000..279ebce04 --- /dev/null +++ b/src/__tests__/Message.test.js @@ -0,0 +1,13 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { Message } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer + .create() + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/MessageContainer.test.js b/src/__tests__/MessageContainer.test.js new file mode 100644 index 000000000..f303c49cb --- /dev/null +++ b/src/__tests__/MessageContainer.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { MessageContainer } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/MessageImage.test.js b/src/__tests__/MessageImage.test.js new file mode 100644 index 000000000..6f1ffe668 --- /dev/null +++ b/src/__tests__/MessageImage.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { MessageImage } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/MessageText.test.js b/src/__tests__/MessageText.test.js new file mode 100644 index 000000000..0b9ee0300 --- /dev/null +++ b/src/__tests__/MessageText.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { MessageText } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Send.test.js b/src/__tests__/Send.test.js new file mode 100644 index 000000000..e79247347 --- /dev/null +++ b/src/__tests__/Send.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { Send } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/SystemMessage.test.js b/src/__tests__/SystemMessage.test.js new file mode 100644 index 000000000..901355dc9 --- /dev/null +++ b/src/__tests__/SystemMessage.test.js @@ -0,0 +1,11 @@ +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { SystemMessage } from '../GiftedChat'; + +it('should render and compare with snapshot', () => { + const tree = renderer.create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/__tests__/Time.test.js b/src/__tests__/Time.test.js new file mode 100644 index 000000000..6e9b00134 --- /dev/null +++ b/src/__tests__/Time.test.js @@ -0,0 +1,12 @@ +import 'react-native'; +import React from 'react'; +import createComponentWithContext from '../../tests/context'; + +import { Time } from '../GiftedChat'; + +it('should render