Skip to content

Commit

Permalink
Fix end-to-end tests
Browse files Browse the repository at this point in the history
Bump Babel preset to ^5 in new projects
Output end-to-end test results to JUnit format
Bump to Xcode 9.4.0
Bump to iOS and Apple TV 11.4 simulators
Initialize simulators without instruments
Downgrade to Node 8 when running end-to-end tests
Rename e2e to end-to-end for clarity
Fix lint failures in ContainerShip scripts
  • Loading branch information
hramos committed Jun 9, 2018
1 parent a52d84d commit d2fd056
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 43 deletions.
54 changes: 34 additions & 20 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ aliases:
# eslint sometimes runs into trouble generating the reports
- &run-lint-checks
name: Lint code
command: scripts/circleci/exec_swallow_error.sh yarn lint --format junit -o ~/react-native/reports/junit/js-lint-results.xml
command: scripts/circleci/exec_swallow_error.sh yarn lint --format junit -o ~/react-native/reports/junit/eslint/results.xml
when: always

- &run-flow-checks
Expand Down Expand Up @@ -274,6 +274,14 @@ aliases:
mkdir -p ~/react-native/reports/junit/
mkdir -p ~/react-native/reports/outputs/
- &boot-simulator-iphone
name: Boot iPhone Simulator
command: xcrun simctl boot "iPhone 5s" || true

- &boot-simulator-appletv
name: Boot Apple TV Simulator
command: xcrun simctl boot "Apple TV" || true

- &run-objc-ios-tests
name: iOS Test Suite
command: ./scripts/objc-test-ios.sh test
Expand All @@ -282,9 +290,13 @@ aliases:
name: tvOS Test Suite
command: ./scripts/objc-test-tvos.sh test

- &run-e2e-tests
name: End-to-End Test Suite
command: node ./scripts/run-ci-e2e-tests.js --ios --tvos --js --retries 3;

- &run-objc-ios-e2e-tests
name: iOS End-to-End Test Suite
command: node ./scripts/run-ci-e2e-tests.js --ios --js --retries 3;
command: node ./scripts/run-ci-e2e-tests.js --ios --retries 3;

- &run-objc-tvos-e2e-tests
name: tvOS End-to-End Test Suite
Expand Down Expand Up @@ -316,7 +328,7 @@ android_defaults: &android_defaults
macos_defaults: &macos_defaults
<<: *defaults
macos:
xcode: "9.2.0"
xcode: "9.4.0"

version: 2
jobs:
Expand Down Expand Up @@ -374,9 +386,7 @@ jobs:
- attach_workspace:
at: ~/react-native

- run: xcrun instruments -w "iPhone 5s (11.2)" || true
# See https://github.com/Homebrew/homebrew-core/issues/26358.
- run: brew upgrade python > /dev/null
- run: *boot-simulator-iphone
- run: brew install watchman
- run: *run-objc-ios-tests

Expand All @@ -390,23 +400,35 @@ jobs:
- attach_workspace:
at: ~/react-native

- run: xcrun instruments -w "Apple TV 1080p (11.2)" || true
# See https://github.com/Homebrew/homebrew-core/issues/26358.
- run: brew upgrade python > /dev/null
- run: *boot-simulator-appletv
- run: brew install watchman
- run: *run-objc-tvos-tests

- store_test_results:
path: ~/react-native/reports/junit

# Runs end to end tests
test_ios_e2e:
test_end_to_end:
<<: *macos_defaults
steps:
- attach_workspace:
at: ~/react-native

- run: xcrun instruments -w "iPhone 5s (11.2)" || true
- run: *boot-simulator-iphone

- run:
name: Configure Environment Variables
command: |
echo 'export PATH=/usr/local/opt/node@8/bin:$PATH' >> $BASH_ENV
source $BASH_ENV
- run:
name: Install Node 8
command: |
brew install node@8
brew link node@8
node -v
- run: *run-objc-ios-e2e-tests

- store_test_results:
Expand Down Expand Up @@ -625,7 +647,7 @@ workflows:
- checkout_code

# End-to-end tests
- test_ios_e2e:
- test_end_to_end:
filters: *filter-ignore-gh-pages
requires:
- checkout_code
Expand Down Expand Up @@ -672,11 +694,3 @@ workflows:
# filters: *filter-ignore-gh-pages
# requires:
# - checkout_code

experimental:
notify:
webhooks:
- url: https://code.facebook.com/circle/webhook/
branches:
only:
- master
8 changes: 4 additions & 4 deletions ContainerShip/scripts/run-android-ci-instrumentation-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const path = require('path');
const colors = {
GREEN: '\x1b[32m',
RED: '\x1b[31m',
RESET: '\x1b[0m'
RESET: '\x1b[0m',
};

const test_opts = {
Expand All @@ -41,7 +41,7 @@ const test_opts = {
TEST_TIMEOUT: parseInt(argv['test-timeout'] || 1000 * 60 * 10),

OFFSET: argv.offset,
COUNT: argv.count
COUNT: argv.count,
};

let max_test_class_length = Number.NEGATIVE_INFINITY;
Expand Down Expand Up @@ -88,7 +88,7 @@ return async.mapSeries(testClasses, (clazz, callback) => {

return async.retry(test_opts.RETRIES, (retryCb) => {
const test_process = child_process.spawn('./ContainerShip/scripts/run-instrumentation-tests-via-adb-shell.sh', [test_opts.PACKAGE, clazz], {
stdio: 'inherit'
stdio: 'inherit',
});

const timeout = setTimeout(() => {
Expand All @@ -112,7 +112,7 @@ return async.mapSeries(testClasses, (clazz, callback) => {
}, (err) => {
return callback(null, {
name: clazz,
status: err ? 'failure' : 'success'
status: err ? 'failure' : 'success',
});
});
}, (err, results) => {
Expand Down
2 changes: 1 addition & 1 deletion local-cli/init/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ function generateProject(destinationRoot, newProjectName, options) {
});
}
if (!options['skip-jest']) {
const jestDeps = `jest babel-jest babel-preset-react-native react-test-renderer@${reactVersion}`;
const jestDeps = `jest babel-jest babel-preset-react-native@^5 react-test-renderer@${reactVersion}`;
if (yarnVersion) {
console.log('Adding Jest...');
execSync(`yarn add ${jestDeps} --dev --exact`, {stdio: 'inherit'});
Expand Down
2 changes: 1 addition & 1 deletion scripts/.tests.env
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export AVD_NAME="testAVD"
export AVD_ABI=x86

## IOS ##
export IOS_TARGET_OS="11.3"
export IOS_TARGET_OS="11.4"
export IOS_DEVICE="iPhone 5s"

export SCHEME="RNTester"
Expand Down
3 changes: 2 additions & 1 deletion scripts/objc-test-ios.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ ROOT=$(dirname "$SCRIPTS")

cd "$ROOT"

TEST_NAME="iOS"
SCHEME="RNTester"
SDK="iphonesimulator"
DESTINATION="platform=iOS Simulator,name=iPhone 5s,OS=10.3.1"
DESTINATION="platform=iOS Simulator,name=iPhone 5s,OS=11.4"

# If there's a "test" argument, pass it to the test script.
. ./scripts/objc-test.sh $1
3 changes: 2 additions & 1 deletion scripts/objc-test-tvos.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ ROOT=$(dirname "$SCRIPTS")

cd "$ROOT"

TEST_NAME="tvOS"
SCHEME="RNTester-tvOS"
SDK="appletvsimulator"
DESTINATION="platform=tvOS Simulator,name=Apple TV 1080p,OS=10.2"
DESTINATION="platform=tvOS Simulator,name=Apple TV,OS=11.4"

# If there's a "test" argument, pass it to the test script.
. ./scripts/objc-test.sh $1
Expand Down
2 changes: 1 addition & 1 deletion scripts/objc-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ xcodebuild \
-sdk $SDK \
-destination "$DESTINATION" \
build test \
| xcpretty --report junit --output ~/react-native/reports/junit/objc-xcodebuild-results.xml
| xcpretty --report junit --output ~/react-native/reports/junit/$TEST_NAME/results.xml

else

Expand Down
40 changes: 26 additions & 14 deletions scripts/run-ci-e2e-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ try {
cd('EndToEndTest');

if (argv.android) {
echo('Running an Android e2e test');
echo('Installing e2e framework');
echo('Running an Android end-to-end test');
echo('Installing end-to-end framework');
if (
tryExecNTimes(
() =>
Expand Down Expand Up @@ -155,14 +155,14 @@ try {
SERVER_PID = packagerProcess.pid;
// wait a bit to allow packager to startup
exec('sleep 15s');
echo('Executing android e2e test');
echo('Executing android end-to-end test');
if (
tryExecNTimes(() => {
exec('sleep 10s');
return exec('node node_modules/.bin/_mocha android-e2e-test.js').code;
}, numberOfRetries)
) {
echo('Failed to run Android e2e tests');
echo('Failed to run Android end-to-end tests');
echo('Most likely the code is broken');
exitCode = 1;
throw Error(exitCode);
Expand All @@ -171,7 +171,7 @@ try {

if (argv.ios || argv.tvos) {
var iosTestType = argv.tvos ? 'tvOS' : 'iOS';
echo('Running the ' + iosTestType + 'app');
echo('Running the ' + iosTestType + ' app');
cd('ios');
// Make sure we installed local version of react-native
if (!test('-e', path.join('EndToEndTest', path.basename(MARKER_IOS)))) {
Expand All @@ -193,22 +193,34 @@ try {
'response=$(curl --write-out %{http_code} --silent --output /dev/null localhost:8081/index.bundle?platform=ios&dev=true)',
);
echo(`Starting packager server, ${SERVER_PID}`);
echo('Executing ' + iosTestType + ' e2e test');
echo('Executing ' + iosTestType + ' end-to-end test');
if (
tryExecNTimes(() => {
exec('sleep 10s');
let destination = 'platform=iOS Simulator,name=iPhone 5s,OS=11.4';
let sdk = 'iphonesimulator';
let scheme = 'EndToEndTest';

if (argv.tvos) {
return exec(
'xcodebuild -destination "platform=tvOS Simulator,name=Apple TV 1080p,OS=10.0" -scheme EndToEndTest-tvOS -sdk appletvsimulator test | xcpretty && exit ${PIPESTATUS[0]}',
).code;
} else {
return exec(
'xcodebuild -destination "platform=iOS Simulator,name=iPhone 5s,OS=10.3.1" -scheme EndToEndTest -sdk iphonesimulator test | xcpretty && exit ${PIPESTATUS[0]}',
).code;
destination = 'platform=tvOS Simulator,name=Apple TV,OS=11.4';
sdk = 'appletvsimulator';
scheme = 'EndToEndTest-tvOS';
}

return exec(
'xcodebuild -destination "' +
destination +
'" -scheme ' +
scheme +
' -sdk ' +
sdk +
' test | xcpretty --report junit --output ~/react-native/reports/junit/' +
iosTestType +
'-e2e/results.xml && exit ${PIPESTATUS[0]}',
).code;
}, numberOfRetries)
) {
echo('Failed to run ' + iosTestType + ' e2e tests');
echo('Failed to run ' + iosTestType + ' end-to-end tests');
echo('Most likely the code is broken');
exitCode = 1;
throw Error(exitCode);
Expand Down

0 comments on commit d2fd056

Please sign in to comment.