mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
'meteor test-packages' improvements:
- Allow testing a package directory in isolation - Allow specifying a release version to use while running tests
This commit is contained in:
committed by
David Glasser
parent
28af50e403
commit
55bfce0de2
@@ -397,9 +397,10 @@ _.extend(Bundle.prototype, {
|
||||
pkg.on_use_handler(inst.api, where);
|
||||
},
|
||||
|
||||
includeTests: function (packageName) {
|
||||
includeTests: function (packageOrPackageName) {
|
||||
var self = this;
|
||||
var pkg = packages.get(self.releaseManifest, packageName);
|
||||
// 'packages.get' is a noop if 'packageOrPackageName' is a Package object.
|
||||
var pkg = packages.get(self.releaseManifest, packageOrPackageName);
|
||||
if (self.tests_included[pkg.id])
|
||||
return;
|
||||
self.tests_included[pkg.id] = true;
|
||||
@@ -766,8 +767,8 @@ _.extend(Bundle.prototype, {
|
||||
* 'symlink' : symlink from a prebuild local installation. used
|
||||
* by `meteor run`
|
||||
*
|
||||
* - testPackages : array of package names whose tests should be included
|
||||
* in this bundle
|
||||
* - testPackages : array of package objects or package names whose
|
||||
* tests should be included in this bundle
|
||||
*
|
||||
* - versionOverride : (for tests) a meteor release version to use
|
||||
* instead of reading from .meteor/version
|
||||
@@ -793,8 +794,8 @@ exports.bundle = function (app_dir, output_path, options) {
|
||||
|
||||
// Include tests if requested
|
||||
if (options.testPackages) {
|
||||
_.each(options.testPackages, function(packageName) {
|
||||
bundle.includeTests(packageName);
|
||||
_.each(options.testPackages, function(packageOrPackageName) {
|
||||
bundle.includeTests(packageOrPackageName);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -153,13 +153,21 @@ Fiber(function () {
|
||||
var opt = require('optimist')
|
||||
.alias('port', 'p').default('port', 3000)
|
||||
.describe('port', 'Port to listen on. NOTE: Also uses port N+1 and N+2.')
|
||||
.describe('release', 'Meteor release version to test.')
|
||||
.describe('deploy', 'Optionally, specify a domain to deploy to instead of running locally.')
|
||||
.describe('deploy', 'Optionally, specify a domain to deploy to, rather than running locally.')
|
||||
.boolean('once') // See #Once
|
||||
.usage(
|
||||
"Usage: meteor test-packages [options] [comma delimited packages]\n" +
|
||||
"Usage: \n" +
|
||||
"\n" +
|
||||
"Run unit tests for packages. Point your browser to localhost:3000 to see results.");
|
||||
"meteor test-packages [--release=x.y.z] --package-dir=<path to local package> [options]\n" +
|
||||
" Runs unit tests on one package located on disk.\n" +
|
||||
"\n" +
|
||||
"meteor test-packages [--release=x.y.z] [comma delimited package names] [options]\n" +
|
||||
" Runs unit tests for a set of packages.\n" +
|
||||
"\n" +
|
||||
"You must either pass the --release option, or be in a git checkout of Meteor,\n" +
|
||||
"in which cases local packages are loaded.\n" +
|
||||
"\n" +
|
||||
"Point your browser to localhost:3000 to run tests and see results.\n");
|
||||
|
||||
var new_argv = opt.argv;
|
||||
|
||||
@@ -172,14 +180,26 @@ Fiber(function () {
|
||||
var releaseVersion = new_argv['release'];
|
||||
|
||||
var testPackages;
|
||||
if (new_argv._[1]) {
|
||||
testPackages = new_argv._[1].split(',');
|
||||
if (new_argv["package-dir"]) {
|
||||
var packageDir = path.resolve(new_argv["package-dir"], "."); // strips trailing path.sep
|
||||
// was important to strip trailing path.sep, otherwise we'd get a package named "foo/"
|
||||
var packageName = path.basename(packageDir);
|
||||
testPackages = [packages.loadFromDir(packageName, packageDir)];
|
||||
} else {
|
||||
if (releaseVersion) {
|
||||
var releaseManifest = warehouse.releaseManifestByVersion(releaseVersion);
|
||||
testPackages = _.keys(packages.list(releaseManifest));
|
||||
if (new_argv._[1]) {
|
||||
testPackages = new_argv._[1].split(',');
|
||||
} else {
|
||||
testPackages = _.keys(packages.list());
|
||||
if (releaseVersion) {
|
||||
var releaseManifest = warehouse.releaseManifestByVersion(releaseVersion);
|
||||
testPackages = _.keys(packages.list(releaseManifest));
|
||||
} else {
|
||||
if (files.in_checkout()) {
|
||||
testPackages = _.keys(packages.list());
|
||||
} else {
|
||||
process.stdout.write("Please specify a release version.");
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -142,10 +142,30 @@ sleep 2 # need to make sure these kills take effect
|
||||
|
||||
echo "... test-packages"
|
||||
|
||||
if [ ! "$TEST_INSTALLED_METEOR" ]; then
|
||||
$METEOR test-packages -p $PORT >> $OUTPUT 2>&1 &
|
||||
mkdir -p "$TMPDIR/local-packages/die-now/"
|
||||
cat > "$TMPDIR/local-packages/die-now/package.js" <<EOF
|
||||
Package.on_test(function (api) {
|
||||
api.use('deps'); // try to use a core package
|
||||
console.log("Dying");
|
||||
process.exit(0);
|
||||
});
|
||||
EOF
|
||||
|
||||
if [ "$TEST_INSTALLED_METEOR" ]; then
|
||||
$METEOR test-packages --release=0.0.1 -p $PORT --package-dir="$TMPDIR/local-packages/die-now/" | grep Dying >> $OUTPUT 2>&1
|
||||
else
|
||||
$METEOR test-packages -p $PORT --package-dir="$TMPDIR/local-packages/die-now/" | grep Dying >> $OUTPUT 2>&1
|
||||
fi
|
||||
# since the server process was killed via 'process.exit', mongo is still running.
|
||||
ps ax | grep -e "$MONGOMARK" | grep -v grep | awk '{print $1}' | xargs kill || true
|
||||
sleep 2 # make sure mongo is dead
|
||||
|
||||
|
||||
if [ "$TEST_INSTALLED_METEOR" ]; then
|
||||
( ! $METEOR test-packages -p $PORT ) | grep "Please specify a release version" >> $OUTPUT 2>&1
|
||||
$METEOR test-packages --release=0.0.1 -p $PORT >> $OUTPUT 2>&1 &
|
||||
else
|
||||
$METEOR test-packages -p $PORT >> $OUTPUT 2>&1 &
|
||||
fi
|
||||
|
||||
METEOR_PID=$!
|
||||
|
||||
@@ -21,7 +21,8 @@ TARGET_DIR=$ENGINE_DIR admin/build-engine-tree.sh
|
||||
export TEST_INSTALLED_METEOR=1 # to use the --release option on `meteor test-packages`
|
||||
export TEST_WAREHOUSE_DIR=$(make_temp_dir meteor-installed-cli-tests-warehouse) # run with empty warehouse
|
||||
METEOR_DIR=$ENGINE_DIR/bin ./cli-test.sh
|
||||
|
||||
unset TEST_INSTALLED_METEOR
|
||||
unset TEST_WAREHOUSE_DIR
|
||||
|
||||
## Run bundler unit tests
|
||||
./bundler-test.sh
|
||||
|
||||
Reference in New Issue
Block a user