chore(install+test): single cmd to full install/test & test JS w/o Dart

* `npm install` now does a full install; auxiliary installation steps
have been integrated into the `postinstall` script.
* Updated developer docs `DEVELOPER.md` accordingly; also added
instructions to dev docs for performing full tests (via `npm test`) --
same as those run on Travis.
* Reorg in tests so that JS tests can run without a Dart env.

Partly fixes #945 **under the assumption that when running JS tests
locally, `ChromeCanary` is the desired browser to use**. Note that CI
tests (Travis) still uses `DartiumWithWebPlatform` across the board
(Maybe because ChromeCanary isn't being installed?)

Fixes #1012.

Closes #1010
This commit is contained in:
Patrice Chalin 2015-03-19 11:36:27 -07:00 committed by Misko Hevery
parent bd48c927d0
commit 83402930f2
12 changed files with 88 additions and 59 deletions

View File

@ -95,23 +95,22 @@ Next, install the modules and packages needed to build Angular and run tests:
```shell ```shell
# Install Angular project dependencies (package.json) # Install Angular project dependencies (package.json)
npm install npm install
# Ensure protractor has the latest webdriver
$(npm bin)/webdriver-manager update
# Install Dart packages
pub get
``` ```
**Optional**: In this document, we make use of project local `npm` package scripts and binaries **Optional**: In this document, we make use of project local `npm` package scripts and binaries
(stored under `./node_modules/.bin`) by prefixing these command invocations with `$(npm bin)`; in (stored under `./node_modules/.bin`) by prefixing these command invocations with `$(npm bin)`; in
particular `gulp` and `protractor` commands. If you prefer, you can drop this path prefix by particular `gulp` and `protractor` commands. If you prefer, you can drop this path prefix by either:
globally installing these two packages as follows:
*Option 1*: globally installing these two packages as follows:
* `npm install -g gulp` (you might need to prefix this command with `sudo`) * `npm install -g gulp` (you might need to prefix this command with `sudo`)
* `npm install -g protractor` (you might need to prefix this command with `sudo`) * `npm install -g protractor` (you might need to prefix this command with `sudo`)
Since global installs can become stale, we avoid their use in these instructions. Since global installs can become stale, and required versions can vary by project, we avoid their
use in these instructions.
*Option 2*: defining a bash alias like `alias nbin='PATH=$(npm bin):$PATH'` as detailed in this
[Stackoverflow answer](http://stackoverflow.com/questions/9679932/how-to-use-package-installed-locally-in-node-modules/15157360#15157360) and used like this: e.g., `nbin gulp build`.
## Build commands ## Build commands
@ -133,22 +132,35 @@ $(npm bin)/gulp clean
## Running Tests Locally ## Running Tests Locally
### Basic tests ### Full test suite
1. `$(npm bin)/gulp test.unit.js`: JS tests in a browser; runs in **watch mode** (i.e. karma * `npm test`: full test suite for both JS and Dart versions of Angular. These are the same tests as
watches the test files for changes and re-runs tests when files are updated). those run on Travis.
2. `$(npm bin)/gulp test.unit.cjs`: JS tests in NodeJS; runs in **watch mode**
3. `$(npm bin)/gulp test.unit.dart`: Dart tests in Dartium; runs in **watch mode**. You can selectively run either the JS or Dart versions as follows:
* `$(npm bin)/gulp test.all.js`
* `$(npm bin)/gulp test.all.dart`
### Unit tests
You can run just the unit tests as follows:
* `$(npm bin)/gulp test.unit.js`: JS tests in a browser; runs in **watch mode** (i.e. karma
watches the test files for changes and re-runs tests when files are updated).
* `$(npm bin)/gulp test.unit.cjs`: JS tests in NodeJS; runs in **watch mode**.
* `$(npm bin)/gulp test.unit.dart`: Dart tests in Dartium; runs in **watch mode**.
If you prefer running tests in "single-run" mode rather than watch mode use If you prefer running tests in "single-run" mode rather than watch mode use
* `$(npm bin)/gulp test.unit.js/ci` * `$(npm bin)/gulp test.unit.js/ci`
* `$(npm bin)/gulp test.unit.cjs/ci`
* `$(npm bin)/gulp test.unit.dart/ci` * `$(npm bin)/gulp test.unit.dart/ci`
**Note**: If you want to only run a single test you can alter the test you wish **Note**: If you want to only run a single test you can alter the test you wish to run by changing
to run by changing `it` to `iit` or `describe` to `ddescribe`. This will only `it` to `iit` or `describe` to `ddescribe`. This will only run that individual test and make it
run that individual test and make it much easier to debug. `xit` and `xdescribe` much easier to debug. `xit` and `xdescribe` can also be useful to exclude a test and a group of
can also be useful to exclude a test and a group of tests respectively. tests respectively.
**Note** for transpiler tests: The karma preprocessor is setup in a way so that after every test **Note** for transpiler tests: The karma preprocessor is setup in a way so that after every test
run the transpiler is reloaded. With that it is possible to make changes to the preprocessor and run the transpiler is reloaded. With that it is possible to make changes to the preprocessor and
@ -232,4 +244,3 @@ on the `debugger;` statement.
You can then step into the code and add watches. You can then step into the code and add watches.
The `debugger;` statement is needed because WebStorm will stop in a transpiled file. Breakpoints in The `debugger;` statement is needed because WebStorm will stop in a transpiled file. Breakpoints in
the original source files are not supported at the moment. the original source files are not supported at the moment.

View File

@ -1,5 +1,6 @@
var gulp = require('gulp'); var gulp = require('gulp');
var gulpPlugins = require('gulp-load-plugins')(); var gulpPlugins = require('gulp-load-plugins')();
var shell = require('gulp-shell');
var runSequence = require('run-sequence'); var runSequence = require('run-sequence');
var madge = require('madge'); var madge = require('madge');
var merge = require('merge'); var merge = require('merge');
@ -26,6 +27,7 @@ var runServerDartTests = require('./tools/build/run_server_dart_tests');
var transformCJSTests = require('./tools/build/transformCJSTests'); var transformCJSTests = require('./tools/build/transformCJSTests');
var util = require('./tools/build/util'); var util = require('./tools/build/util');
// Note: when DART_SDK is not found, all gulp tasks ending with `.dart` will be skipped.
var DART_SDK = require('./tools/build/dartdetect')(gulp); var DART_SDK = require('./tools/build/dartdetect')(gulp);
// ----------------------- // -----------------------
// configuration // configuration
@ -431,7 +433,11 @@ gulp.task('build/multicopy.dart', copy.multicopy(gulp, gulpPlugins, {
// ------------ // ------------
// pubspec // pubspec
gulp.task('build/pubspec.dart', pubget(gulp, gulpPlugins, { // Run a top-level `pub get` for this project.
gulp.task('pubget.dart', pubget.dir(gulp, gulpPlugins, { dir: '.', command: DART_SDK.PUB }));
// Run `pub get` over CONFIG.dest.dart
gulp.task('build/pubspec.dart', pubget.subDir(gulp, gulpPlugins, {
dir: CONFIG.dest.dart, dir: CONFIG.dest.dart,
command: DART_SDK.PUB command: DART_SDK.PUB
})); }));
@ -588,6 +594,22 @@ createDocsTasks(true);
createDocsTasks(false); createDocsTasks(false);
// ------------------ // ------------------
// CI tests suites
gulp.task('test.js', function(done) {
runSequence('test.transpiler.unittest', 'docs/test', 'test.unit.js/ci',
'test.unit.cjs/ci', done);
});
gulp.task('test.dart', function(done) {
runSequence('test.transpiler.unittest', 'docs/test', 'test.unit.dart/ci', done);
});
// Reuse the Travis scripts
// TODO: rename test_*.sh to test_all_*.sh
gulp.task('test.all.js', shell.task(['./scripts/ci/test_js.sh']))
gulp.task('test.all.dart', shell.task(['./scripts/ci/test_dart.sh']))
// karma tests // karma tests
// These tests run in the browser and are allowed to access // These tests run in the browser and are allowed to access
// HTML DOM APIs. // HTML DOM APIs.

View File

@ -20,10 +20,8 @@
"url": "https://github.com/angular/angular.git" "url": "https://github.com/angular/angular.git"
}, },
"scripts": { "scripts": {
"test": "npm run test-js && npm run test-dart", "postinstall": "webdriver-manager update && bower install && gulp pubget.dart",
"test-js": "./scripts/ci/test_js.sh", "test": "gulp test.all.js && gulp test.all.dart"
"test-dart": "./scripts/ci/test_dart.sh",
"postinstall": "./node_modules/.bin/bower install"
}, },
"dependencies": { "dependencies": {
"es6-module-loader": "^0.9.2", "es6-module-loader": "^0.9.2",

View File

@ -1,4 +1,4 @@
#!/bin/false #!/bin/bash
set -e -o pipefail set -e -o pipefail
if [[ -z $ENV_SET ]]; then if [[ -z $ENV_SET ]]; then
@ -95,4 +95,4 @@ if [[ -z $ENV_SET ]]; then
echo NGDART_SCRIPT_DIR=$NGDART_SCRIPT_DIR echo NGDART_SCRIPT_DIR=$NGDART_SCRIPT_DIR
$DART --version 2>&1 $DART --version 2>&1
fi fi

View File

@ -4,8 +4,9 @@ set -e
echo ============================================================================= echo =============================================================================
# go to project dir # go to project dir
SCRIPT_DIR=$(dirname $0) SCRIPT_DIR=$(dirname $0)
source $SCRIPT_DIR/env_dart.sh
cd $SCRIPT_DIR/../.. cd $SCRIPT_DIR/../..
${SCRIPT_DIR}/test_unit_dart.sh ./node_modules/.bin/gulp test.js --browsers=$KARMA_BROWSERS
${SCRIPT_DIR}/test_server_dart.sh ${SCRIPT_DIR}/test_server_dart.sh
${SCRIPT_DIR}/test_e2e_dart.sh ${SCRIPT_DIR}/test_e2e_dart.sh

View File

@ -4,7 +4,6 @@ set -e
echo ============================================================================= echo =============================================================================
# go to project dir # go to project dir
SCRIPT_DIR=$(dirname $0) SCRIPT_DIR=$(dirname $0)
source $SCRIPT_DIR/env_dart.sh
cd $SCRIPT_DIR/../.. cd $SCRIPT_DIR/../..
./node_modules/.bin/webdriver-manager update ./node_modules/.bin/webdriver-manager update

View File

@ -4,7 +4,6 @@ set -e
echo ============================================================================= echo =============================================================================
# go to project dir # go to project dir
SCRIPT_DIR=$(dirname $0) SCRIPT_DIR=$(dirname $0)
source $SCRIPT_DIR/env_dart.sh
cd $SCRIPT_DIR/../.. cd $SCRIPT_DIR/../..
./node_modules/.bin/webdriver-manager update ./node_modules/.bin/webdriver-manager update
@ -21,4 +20,10 @@ trap killServer EXIT
# wait for server to come up! # wait for server to come up!
sleep 10 sleep 10
./node_modules/.bin/protractor protractor-js.conf.js --browsers=${E2E_BROWSERS:-Dartium} # Let protractor use default browser unless one is specified.
OPTIONS="";
if [[ -n "$E2E_BROWSERS" ]]; then
OPTIONS="--browsers=$E2E_BROWSERS";
fi
./node_modules/.bin/protractor protractor-js.conf.js $OPTIONS

View File

@ -6,6 +6,11 @@ echo ===========================================================================
SCRIPT_DIR=$(dirname $0) SCRIPT_DIR=$(dirname $0)
cd $SCRIPT_DIR/../.. cd $SCRIPT_DIR/../..
${SCRIPT_DIR}/test_unit_js.sh # Issue #945 Travis still uses Dartium, and hence needs the env setup.
# ${SCRIPT_DIR}/test_server_js.sh # JS doesn't yet have server tests # For local tests, when a developer doesn't have Dart, don't source env_dart.sh
if ${SCRIPT_DIR}/env_dart.sh 2>&1 > /dev/null ; then
source $SCRIPT_DIR/env_dart.sh
fi
./node_modules/.bin/gulp test.js --browsers=${KARMA_BROWSERS:-ChromeCanary}
${SCRIPT_DIR}/test_e2e_js.sh ${SCRIPT_DIR}/test_e2e_js.sh

View File

@ -4,7 +4,6 @@ set -e
echo ============================================================================= echo =============================================================================
# go to project dir # go to project dir
SCRIPT_DIR=$(dirname $0) SCRIPT_DIR=$(dirname $0)
source $SCRIPT_DIR/env_dart.sh
cd $SCRIPT_DIR/../.. cd $SCRIPT_DIR/../..
./node_modules/.bin/webdriver-manager update ./node_modules/.bin/webdriver-manager update

View File

@ -1,11 +0,0 @@
#!/bin/bash
set -e
echo =============================================================================
# go to project dir
SCRIPT_DIR=$(dirname $0)
source $SCRIPT_DIR/env_dart.sh
cd $SCRIPT_DIR/../..
./node_modules/.bin/gulp test.transpiler.unittest
./node_modules/.bin/gulp test.unit.dart/ci --browsers=$KARMA_BROWSERS

View File

@ -1,13 +0,0 @@
#!/bin/bash
set -e
echo =============================================================================
# go to project dir
SCRIPT_DIR=$(dirname $0)
source $SCRIPT_DIR/env_dart.sh
cd $SCRIPT_DIR/../..
./node_modules/.bin/gulp test.transpiler.unittest
./node_modules/.bin/gulp docs/test
./node_modules/.bin/gulp test.unit.js/ci --browsers=$KARMA_BROWSERS
./node_modules/.bin/gulp test.unit.cjs/ci

View File

@ -2,7 +2,21 @@ var util = require('./util');
var spawn = require('child_process').spawn; var spawn = require('child_process').spawn;
var path = require('path'); var path = require('path');
module.exports = function(gulp, plugins, config) { module.exports = {
dir: pubGetDir,
subDir: pubGetSubDir
};
function pubGetDir(gulp, plugins, config) {
return function() {
return util.processToPromise(spawn(config.command, ['get'], {
stdio: 'inherit',
cwd: config.dir
}));
};
};
function pubGetSubDir(gulp, plugins, config) {
return function() { return function() {
// We need to execute pubspec serially as otherwise we can get into trouble // We need to execute pubspec serially as otherwise we can get into trouble
// with the pub cache... // with the pub cache...
@ -14,4 +28,3 @@ module.exports = function(gulp, plugins, config) {
}); });
}; };
}; };