diff --git a/.gitignore b/.gitignore
index 7b17ed42d3..50dba449c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,4 +37,6 @@ Example/Pods
Example/compile_commands.json
Example/Emission/Configuration.h
.vscode/launchReactNative.js
-.vscode/.react/
\ No newline at end of file
+.vscode/.react/
+typings
+
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..d5e060cf5c
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,15 @@
+language: node_js
+node_js:
+ - "6.1"
+
+before_install:
+ - rvm install 2.2
+ - rvm use 2.2 --fuzzy
+
+install:
+ - bundle install
+ - npm install
+
+before_script:
+ - bundle exec danger
+ - npm run lint
diff --git a/Dangerfile.js b/Dangerfile.js
new file mode 100644
index 0000000000..f573d41f60
--- /dev/null
+++ b/Dangerfile.js
@@ -0,0 +1 @@
+message("Hello, world.")
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000000..34446128b6
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,7 @@
+# Once danger-js is shipped, I'm happy to move this to a `gem install danger-js` step in travis if we want.
+source "https://rubygems.org"
+
+gem "danger", git: "https://github.com/danger/danger", :branch => "js"
+gem "danger-js"
+
+gem "danger-junit"
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000000..93f58fe834
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,67 @@
+GIT
+ remote: https://github.com/danger/danger
+ revision: b5ceb81c029eee496f746b4039b2801d5cc4b9c0
+ branch: js
+ specs:
+ danger (2.1.2)
+ claide (~> 1.0)
+ claide-plugins (> 0.9.0)
+ colored (~> 1.2)
+ cork (~> 0.1)
+ faraday (~> 0)
+ faraday-http-cache (~> 1.0)
+ git (~> 1)
+ kramdown (~> 1.5)
+ octokit (~> 4.2)
+ terminal-table (~> 1)
+
+GEM
+ remote: https://rubygems.org/
+ specs:
+ addressable (2.4.0)
+ claide (1.0.0)
+ claide-plugins (0.9.1)
+ cork
+ nap
+ open4 (~> 1.3)
+ colored (1.2)
+ cork (0.1.0)
+ colored (~> 1.2)
+ danger-js (1.0.0)
+ danger (> 2.0)
+ therubyracer (~> 0.12)
+ danger-junit (0.7.0)
+ danger (~> 2.0)
+ ox (~> 2.0)
+ faraday (0.9.2)
+ multipart-post (>= 1.2, < 3)
+ faraday-http-cache (1.3.1)
+ faraday (~> 0.8)
+ git (1.3.0)
+ kramdown (1.11.1)
+ libv8 (3.16.14.15)
+ multipart-post (2.0.0)
+ nap (1.1.0)
+ octokit (4.3.0)
+ sawyer (~> 0.7.0, >= 0.5.3)
+ open4 (1.3.4)
+ ox (2.4.4)
+ ref (2.0.0)
+ sawyer (0.7.0)
+ addressable (>= 2.3.5, < 2.5)
+ faraday (~> 0.8, < 0.10)
+ terminal-table (1.6.0)
+ therubyracer (0.12.2)
+ libv8 (~> 3.16.14.0)
+ ref
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ danger!
+ danger-js
+ danger-junit
+
+BUNDLED WITH
+ 1.12.5
diff --git a/dependencyci.yml b/dependencyci.yml
index bf79edfe2d..93aff3a15e 100644
--- a/dependencyci.yml
+++ b/dependencyci.yml
@@ -1,5 +1,9 @@
platforms:
+ rubygems:
+ colored:
+ tests:
+ unmaintained: skip
NPM:
jade:
tests:
- deprecated: skip
\ No newline at end of file
+ deprecated: skip
diff --git a/jsconfig.json b/jsconfig.json
index 825156ba50..8180efb77c 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -7,6 +7,7 @@
"exclude": [
"node_modules",
"Pod/Assets",
- "Example/Build"
+ "Example/Build",
+ ".vscode/typings"
]
}
diff --git a/lib/components/__tests__/__snapshots__/seperator-tests.js.snap b/lib/components/__tests__/__snapshots__/seperator-tests.js.snap
new file mode 100644
index 0000000000..cc890c8aca
--- /dev/null
+++ b/lib/components/__tests__/__snapshots__/seperator-tests.js.snap
@@ -0,0 +1,14 @@
+exports[`test looks like expected 1`] = `
+
+`;
diff --git a/lib/components/__tests__/__snapshots__/tab_view-tests.js.snap b/lib/components/__tests__/__snapshots__/tab_view-tests.js.snap
new file mode 100644
index 0000000000..58062e7e3b
--- /dev/null
+++ b/lib/components/__tests__/__snapshots__/tab_view-tests.js.snap
@@ -0,0 +1,26 @@
+exports[`test looks like expected 1`] = `
+
+
+
+
+`;
diff --git a/lib/components/__tests__/seperator-tests.js b/lib/components/__tests__/seperator-tests.js
new file mode 100644
index 0000000000..71216beece
--- /dev/null
+++ b/lib/components/__tests__/seperator-tests.js
@@ -0,0 +1,13 @@
+import 'react-native'
+import React from 'react'
+import renderer from 'react-test-renderer'
+import Separator from '..//separator'
+
+it('looks like expected', () => {
+ const tree = renderer.create(
+
+ ).toJSON()
+ expect(tree).toMatchSnapshot()
+})
+
+
diff --git a/lib/components/__tests__/tab_view-tests.js b/lib/components/__tests__/tab_view-tests.js
new file mode 100644
index 0000000000..21f43b3c70
--- /dev/null
+++ b/lib/components/__tests__/tab_view-tests.js
@@ -0,0 +1,11 @@
+import 'react-native'
+import React from 'react'
+import renderer from 'react-test-renderer'
+import TabView from '../tab_view'
+
+it('looks like expected', () => {
+ const tree = renderer.create(
+ {}} />
+ ).toJSON()
+ expect(tree).toMatchSnapshot()
+})
diff --git a/package.json b/package.json
index 3b97e0b0ca..8b55098b73 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,11 @@
"sync-colors": "cd externals/elan && git fetch && git checkout origin/master && cp components/lib/variables/colors.json ../../data",
"sync-externals": "npm run-script sync-schema && npm run-script sync-colors",
"sync-schema": "cd externals/metaphysics && git fetch && git checkout origin/master && npm install && npm run dump-schema -- ../../data && rm -rf node_modules",
- "test": "env NODE_ENV=test NODE_PATH=./lib mocha --recursive ./test"
+ "test": "jest",
+ "testing": "jest --watch"
+ },
+ "jest": {
+ "preset": "jest-react-native"
},
"repository": {
"type": "git",
@@ -49,22 +53,21 @@
"devDependencies": {
"@kadira/react-native-storybook": "^1.11.3",
"babel-eslint": "^6.0.0",
+ "babel-jest": "^14.1.0",
+ "babel-polyfill": "^6.13.0",
+ "babel-preset-react-native": "^1.9.0",
"babel-relay-plugin": "^0.9.0",
- "chai": "^3.5.0",
- "chai-as-promised": "^5.3.0",
- "chai-enzyme": "^0.4.2",
- "concurrently": "^2.2.0",
- "enzyme": "^2.2.0",
"eslint": "^2.5.3",
"eslint-plugin-flow-vars": "^0.2.1",
"eslint-plugin-flowtype": "^2.3.1",
"eslint-plugin-react": "^4.2.1",
"flow-bin": "0.29.0",
- "mocha": "^2.4.5",
- "react-addons-test-utils": "^15.1.0",
- "react-dom": "^15.1.0",
+ "jest": "^14.1.0",
+ "jest-cli": "^14.1.0",
+ "jest-react-native": "^14.1.2",
"react-storybooks-relay-container": "^1.0.0",
- "sinon": "^1.17.3"
+ "react-test-renderer": "^15.3.0",
+ "typings": "^1.3.2"
},
"peerDependencies": {
"babel-relay-plugin": "^0.9.0"
diff --git a/test/components/artist/header.test.js b/test/components/artist/header.test.js
deleted file mode 100644
index 5c586785c6..0000000000
--- a/test/components/artist/header.test.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import common from '../../support/common'
-const { expect, MockComponents } = common
-const { Text } = MockComponents
-
-import { shallow } from 'enzyme'
-
-import Header from 'components/artist/header'
-
-describe('Artist Header', function () {
- it('renders', function () {
- expect(shallow()).to.contain(Kevin Beasley)
- })
-})
diff --git a/test/containers/artist.test.js b/test/containers/artist.test.js
deleted file mode 100644
index 276aa8dc13..0000000000
--- a/test/containers/artist.test.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import common from '../support/common'
-const { React, expect, MockComponents } = common
-const { ScrollView } = MockComponents
-
-import { shallow, render } from 'enzyme'
-
-import Artist from 'containers/artist'
-import Header from 'components/artist/header'
-
-describe('Artist container', function () {
- it('renders', function () {
- // expect(shallow().first().type().displayName).to.equal('ScrollView');
- // console.log(shallow().length);
- // expect(shallow().find('Header').text()).to.equal('Kevin Beasley');
- })
-})
diff --git a/test/mocha.opts b/test/mocha.opts
deleted file mode 100644
index c0f4014223..0000000000
--- a/test/mocha.opts
+++ /dev/null
@@ -1,2 +0,0 @@
---compilers js:./test/support/compiler
---require ./test/support/common
diff --git a/test/sanity.test.js b/test/sanity.test.js
deleted file mode 100644
index 5a5c10e65f..0000000000
--- a/test/sanity.test.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/* eslint-env node, mocha */
-
-// https://medium.com/@jcfrancisco/unit-testing-react-native-components-a-firsthand-guide-cea561df242b#.ym5r45t78
-
-import common from './support/common'
-const { createShallowRenderer, React, expect, MockComponents } = common
-
-class TestFixture extends React.Component {
- render() {
- return
- }
-}
-
-function setup() {
- const props = {}
-
- const renderer = createShallowRenderer()
- renderer.render()
- const output = renderer.getRenderOutput()
-
- return {
- props,
- output,
- renderer,
- }
-}
-
-describe('TestFixture', () => {
- it('should render a scrollview', () => {
- const { output } = setup()
- expect(output.type.displayName).to.equal(MockComponents.ScrollView.displayName)
- })
-})
diff --git a/test/support/common.js b/test/support/common.js
deleted file mode 100644
index 771b18595c..0000000000
--- a/test/support/common.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import chai from 'chai'
-import chaiAsPromised from 'chai-as-promised'
-import React from 'react'
-import ReactTestUtils from 'react-addons-test-utils'
-import { MockComponents } from './mocks/react-native'
-
-chai.use(chaiAsPromised)
-
-export default {
- expect: chai.expect,
- createShallowRenderer: ReactTestUtils.createRenderer,
- React,
- MockComponents,
-}
diff --git a/test/support/compiler.js b/test/support/compiler.js
deleted file mode 100644
index e3fbd8c033..0000000000
--- a/test/support/compiler.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var fs = require('fs')
-var path = require('path')
-var babel = require('babel-core')
-var origJs = require.extensions['.js']
-
-require.extensions['.js'] = function (module, fileName) {
- var output
- if (fileName === path.resolve('./node_modules/react-native/Libraries/react-native/react-native.js')) {
- fileName = path.resolve('./test/support/mocks/react-native.js')
- }
- if (fileName.indexOf('node_modules/') >= 0) {
- return (origJs || require.extensions['.js'])(module, fileName)
- }
- var src = fs.readFileSync(fileName, 'utf8')
- output = babel.transform(src, {
- filename: fileName,
- sourceFileName: fileName,
- presets: ['react-native'],
- }).code
-
- return module._compile(output, fileName)
-}
diff --git a/test/support/mocks/react-native.js b/test/support/mocks/react-native.js
deleted file mode 100644
index 17f67c2415..0000000000
--- a/test/support/mocks/react-native.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react'
-
-function mockComponent(type) {
- const Component = React.createClass({
- displayName: type,
- propTypes: { children: React.PropTypes.node },
- render() { return React.createElement(React.DOM.div, this.props, this.props.children) },
- })
- return Component
-}
-
-const componentsToMock = [
- 'View',
- 'Text',
- 'Component',
- 'ScrollView',
- 'TextInput',
-]
-
-export const MockComponents = componentsToMock.reduce((agg, type) => {
- agg[type] = mockComponent(type)
- return agg
-}, {})
-
-export default {
- ...React,
- ...MockComponents,
- StyleSheet: {
- create: (ss) => ss,
- },
- PropTypes: React.PropTypes,
-}
diff --git a/tsconfig.json b/tsconfig.json
index 29809a934c..90aabbabf8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -7,4 +7,4 @@
"Pod/Assets",
"Example/Build"
]
-}
\ No newline at end of file
+}
diff --git a/typings.json b/typings.json
new file mode 100644
index 0000000000..e1113fddfd
--- /dev/null
+++ b/typings.json
@@ -0,0 +1,8 @@
+{
+ "globalDependencies": {
+ "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
+ "lodash": "registry:dt/lodash#4.14.0+20160802150749",
+ "react": "registry:dt/react#0.14.0+20160805125551",
+ "react-native": "registry:dt/react-native#0.29.0+20160728152643"
+ }
+}