Skip to content

Commit 6d3e074

Browse files
Cristian CarlessoFacebook Github Bot
authored andcommitted
Adding Jest preset so that people can configure Jest using react-native as preset
Reviewed By: cpojer Differential Revision: D4081817 fbshipit-source-id: 43cf2ec467ea69651705162b6a58e0b3f1ad1dbf
1 parent bb84c37 commit 6d3e074

File tree

5 files changed

+73
-29
lines changed

5 files changed

+73
-29
lines changed

jest-preset.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"haste": {
3+
"defaultPlatform": "ios",
4+
"platforms": ["android", "ios"],
5+
"providesModuleNodeModules": [
6+
"react",
7+
"react-native"
8+
]
9+
},
10+
"moduleNameMapper": {
11+
"^image![a-zA-Z0-9$_-]+$": "GlobalImageStub",
12+
"^[./a-zA-Z0-9$_-]+\\.(bmp|gif|jpg|jpeg|png|psd|svg|webp)$": "RelativeImageStub"
13+
},
14+
"modulePathIgnorePatterns": [
15+
"<rootDir>/node_modules/react-native/Libraries/react-native/",
16+
"<rootDir>/node_modules/react-native/packager/"
17+
],
18+
"preprocessorIgnorePatterns": [
19+
"node_modules/(?!(jest-)?react-native|react-clone-referenced-element)"
20+
],
21+
"setupFiles": [
22+
"<rootDir>/node_modules/react-native/jest/setup.js"
23+
],
24+
"testEnvironment": "node"
25+
}

jest/setup.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ global.Promise = require.requireActual('promise');
2020
global.regeneratorRuntime = require.requireActual('regenerator-runtime/runtime');
2121

2222
jest
23+
.mock('setupDevtools')
2324
.mock('npmlog');
2425

2526
// there's a __mock__ for it.
@@ -113,7 +114,17 @@ const mockNativeModules = {
113114
),
114115
prefetchImage: jest.fn(),
115116
},
117+
KeyboardObserver: {
118+
addListener: jest.fn(),
119+
removeListeners: jest.fn(),
120+
},
116121
ModalFullscreenViewManager: {},
122+
Networking: {
123+
sendRequest: jest.fn(),
124+
abortRequest: jest.fn(),
125+
addListener: jest.fn(),
126+
removeListeners: jest.fn(),
127+
},
117128
SourceCode: {
118129
scriptURL: null,
119130
},
@@ -142,6 +153,15 @@ const mockNativeModules = {
142153
Constants: {},
143154
},
144155
},
156+
WebSocketModule: {
157+
connect: jest.fn(),
158+
send: jest.fn(),
159+
sendBinary: jest.fn(),
160+
ping: jest.fn(),
161+
close: jest.fn(),
162+
addListener: jest.fn(),
163+
removeListeners: jest.fn(),
164+
},
145165
};
146166

147167
Object.keys(mockNativeModules).forEach(module => {

local-cli/generator/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
var fs = require('fs');
1212
var path = require('path');
13-
var yeoman = require('yeoman-generator');
1413
var utils = require('../generator-utils');
14+
var yeoman = require('yeoman-generator');
1515

1616
module.exports = yeoman.generators.NamedBase.extend({
1717
constructor: function() {
@@ -114,7 +114,7 @@ module.exports = yeoman.generators.NamedBase.extend({
114114

115115
this.npmInstall(`react@${reactVersion}`, { '--save': true, '--save-exact': true });
116116
if (!this.options['skip-jest']) {
117-
this.npmInstall(`jest babel-jest jest-react-native babel-preset-react-native react-test-renderer@${reactVersion}`.split(' '), {
117+
this.npmInstall(`jest babel-jest babel-preset-react-native react-test-renderer@${reactVersion}`.split(' '), {
118118
saveDev: true,
119119
'--save-exact': true
120120
});
@@ -145,7 +145,7 @@ module.exports = yeoman.generators.NamedBase.extend({
145145
);
146146
packageJSON.scripts.test = 'jest';
147147
packageJSON.jest = {
148-
preset: 'jest-react-native'
148+
preset: 'react-native'
149149
};
150150
fs.writeFileSync(packageJSONPath, JSON.stringify(packageJSON, null, '\t'));
151151
}

package.json

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -102,24 +102,25 @@
102102
},
103103
"main": "Libraries/react-native/react-native.js",
104104
"files": [
105-
"React",
106-
"React.podspec",
107-
"ReactAndroid",
108-
"ReactCommon",
109-
"react.gradle",
105+
".flowconfig",
110106
"android",
111-
"Libraries",
112-
"lib",
113-
"packager",
114107
"cli.js",
115-
"local-cli",
108+
"flow",
116109
"init.sh",
110+
"jest-preset.json",
111+
"jest",
112+
"lib",
113+
"Libraries",
117114
"LICENSE",
115+
"local-cli",
116+
"packager",
118117
"PATENTS",
119-
"README.md",
120-
"jest",
121-
".flowconfig",
122-
"flow"
118+
"react.gradle",
119+
"React.podspec",
120+
"React",
121+
"ReactAndroid",
122+
"ReactCommon",
123+
"README.md"
123124
],
124125
"scripts": {
125126
"test": "jest",

scripts/run-ci-e2e-tests.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ try {
5757
}
5858
}
5959

60-
if (argv['android']) {
60+
if (argv.android) {
6161
if (exec('./gradlew :ReactAndroid:installArchives -Pjobs=1 -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError"').code) {
6262
echo('Failed to compile Android binaries');
6363
exitCode = 1;
@@ -88,7 +88,7 @@ try {
8888

8989
cd('EndToEndTest');
9090

91-
if (argv['android']) {
91+
if (argv.android) {
9292
echo('Running an Android e2e test');
9393
echo('Installing e2e framework');
9494
if (tryExecNTimes(
@@ -122,7 +122,7 @@ try {
122122
exitCode = 1;
123123
throw Error(exitCode);
124124
}
125-
let packagerEnv = Object.create(process.env);
125+
const packagerEnv = Object.create(process.env);
126126
packagerEnv.REACT_NATIVE_MAX_WORKERS = 1;
127127
// shelljs exec('', {async: true}) does not emit stdout events, so we rely on good old spawn
128128
const packagerProcess = spawn('npm', ['start'], {
@@ -146,7 +146,7 @@ try {
146146
}
147147
}
148148

149-
if (argv['ios']) {
149+
if (argv.ios) {
150150
echo('Running an iOS app');
151151
cd('ios');
152152
// Make sure we installed local version of react-native
@@ -156,7 +156,7 @@ try {
156156
throw Error(exitCode);
157157
}
158158
// shelljs exec('', {async: true}) does not emit stdout events, so we rely on good old spawn
159-
let packagerEnv = Object.create(process.env);
159+
const packagerEnv = Object.create(process.env);
160160
packagerEnv.REACT_NATIVE_MAX_WORKERS = 1;
161161
const packagerProcess = spawn('npm', ['start', '--', '--non-persistent'],
162162
{
@@ -183,7 +183,7 @@ try {
183183
cd('..');
184184
}
185185

186-
if (argv['js']) {
186+
if (argv.js) {
187187
// Check the packager produces a bundle (doesn't throw an error)
188188
if (exec('react-native bundle --platform android --dev true --entry-file index.android.js --bundle-output android-bundle.js').code) {
189189
echo('Could not build android package');
@@ -200,13 +200,11 @@ try {
200200
exitCode = 1;
201201
throw Error(exitCode);
202202
}
203-
// Temporarily removed jest test until a RN fix to jest lands in a couple of days
204-
// ping @bestander after 27.09.2016 if you see this
205-
// if (exec(`npm test`).code) {
206-
// echo('Jest test failure');
207-
// exitCode = 1;
208-
// throw Error(exitCode);
209-
// }
203+
if (exec('npm test').code) {
204+
echo('Jest test failure');
205+
exitCode = 1;
206+
throw Error(exitCode);
207+
}
210208
}
211209
exitCode = 0;
212210

0 commit comments

Comments
 (0)