Spec cleanup and fixes (#366)
* Merge duplicated tests in package.spec into one
* Let Jasmine handle promises in tests
* fix: return unhandled promises in spec
* Don't use `done` for synchronous tests
diff --git a/spec/e2e/endtoend.spec.js b/spec/e2e/endtoend.spec.js
index 37a6048..b33e013 100644
--- a/spec/e2e/endtoend.spec.js
+++ b/spec/e2e/endtoend.spec.js
@@ -116,7 +116,7 @@
// "InProcessServer extension"
- it('spec.5a should build project containing plugin with InProcessServer extension', function (done) {
+ it('spec.5a should build project containing plugin with InProcessServer extension', function () {
var extensionsPluginInfo, api;
extensionsPluginInfo = new PluginInfo(extensionsPlugin);
@@ -125,20 +125,10 @@
api.locations.root = path.join(buildDirectory, projectFolder);
api.locations.www = path.join(buildDirectory, projectFolder, 'www');
- var fail = jasmine.createSpy('fail')
- .and.callFake(function (err) {
- console.error(err);
- });
-
- api.addPlugin(extensionsPluginInfo)
+ return api.addPlugin(extensionsPluginInfo)
.then(function () {
shell.exec(buildScriptPath, { silent: silent });
_expectSubdirAndFileExist('CordovaApp.Windows10_1.0.0.0_anycpu_debug_Test', 'CordovaApp.Windows10_1.0.0.0_anycpu_debug.appx');
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
@@ -231,7 +221,7 @@
// "InProcessServer extension"
- it('spec.5b should build project (8.1) containing plugin with InProcessServer extension', function (done) {
+ it('spec.5b should build project (8.1) containing plugin with InProcessServer extension', function () {
var extensionsPluginInfo, api;
extensionsPluginInfo = new PluginInfo(extensionsPlugin);
@@ -240,21 +230,11 @@
api.locations.root = path.join(buildDirectory, projectFolder);
api.locations.www = path.join(buildDirectory, projectFolder, 'www');
- var fail = jasmine.createSpy('fail')
- .and.callFake(function (err) {
- console.error(err);
- });
-
- api.addPlugin(extensionsPluginInfo)
+ return api.addPlugin(extensionsPluginInfo)
.then(function () {
shell.exec(buildScriptPath + ' --appx=8.1', { silent: silent });
_expectExist(/.*Windows.*\.appxupload/);
_expectExist(/.*Phone.*\.appxupload/);
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
diff --git a/spec/unit/ConfigChanges.spec.js b/spec/unit/ConfigChanges.spec.js
index 022b696..6e0a8ed 100644
--- a/spec/unit/ConfigChanges.spec.js
+++ b/spec/unit/ConfigChanges.spec.js
@@ -119,13 +119,8 @@
return appxmanifest.getCapabilities();
}
- var fail = jasmine.createSpy('fail')
- .and.callFake(function (err) {
- console.error(err);
- });
-
- it('should be removed using overriden PlatformMunger', function (done) {
- api.addPlugin(dummyPluginInfo)
+ it('should be removed using overriden PlatformMunger', function () {
+ return api.addPlugin(dummyPluginInfo)
.then(function () {
// There is the one default capability in manifest with 'internetClient' name
expect(getManifestCapabilities(windowsManifest).length).toBe(getPluginCapabilities(dummyPluginInfo).length + 1);
@@ -133,16 +128,11 @@
})
.then(function () {
expect(getManifestCapabilities(windowsManifest).length).toBe(1);
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
- it('should be added with uap prefixes when install plugin', function (done) {
- api.addPlugin(dummyPluginInfo)
+ it('should be added with uap prefixes when install plugin', function () {
+ return api.addPlugin(dummyPluginInfo)
.then(function () {
// There is the one default capability in manifest with 'internetClient' name
var manifestCapabilities = getManifestCapabilities(windowsManifest10);
@@ -158,15 +148,10 @@
})
.then(function () {
expect(getManifestCapabilities(windowsManifest10).length).toBe(1);
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
- it('should be added as DeviceCapabilities when install plugin', function (done) {
+ it('should be added as DeviceCapabilities when install plugin', function () {
function isDeviceCapability (capability) {
return capability.type === 'DeviceCapability';
}
@@ -187,7 +172,7 @@
expect(manifestCapabilities.length).toBe(1);
}
- api.addPlugin(dummyPluginInfo)
+ return api.addPlugin(dummyPluginInfo)
.then(function () {
checkCapabilitiesAfterInstall(windowsManifest);
checkCapabilitiesAfterInstall(windowsManifest10);
@@ -196,11 +181,6 @@
.then(function () {
checkCapabilitiesAfterRemove(windowsManifest);
checkCapabilitiesAfterRemove(windowsManifest10);
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
});
diff --git a/spec/unit/MSBuildTools.spec.js b/spec/unit/MSBuildTools.spec.js
index b610259..94c99ba 100644
--- a/spec/unit/MSBuildTools.spec.js
+++ b/spec/unit/MSBuildTools.spec.js
@@ -36,17 +36,14 @@
return (availableVersions.indexOf(version) >= 0) ? Q.resolve(new MSBuildTools(version, fakeToolsPath(version))) : Q.resolve(null);
};
- var versionTest = function (availableVersions, version, done) {
+ var versionTest = function (availableVersions, version) {
buildTools.__set__('checkMSBuildVersion', checkMSBuildVersionFake.bind(null, availableVersions));
- buildTools.findAvailableVersion().then(function (msbuildTools) {
+ return buildTools.findAvailableVersion().then(function (msbuildTools) {
expect(msbuildTools).not.toBeNull();
expect(msbuildTools.version).toBeDefined();
expect(msbuildTools.path).toBeDefined();
expect(msbuildTools.version).toBe(version);
expect(msbuildTools.path).toBe(fakeToolsPath(version));
- if (typeof done === 'function') {
- done();
- }
});
};
@@ -58,34 +55,28 @@
buildTools.__set__('checkMSBuildVersion', checkMSBuildVersionOriginal);
});
- it('spec.1 should find 14.0 available version if 12.0 is unavailable', function (done) {
- versionTest(['14.0'], '14.0', done);
+ it('spec.1 should find 14.0 available version if 12.0 is unavailable', function () {
+ return versionTest(['14.0'], '14.0');
});
- it('spec.2 should select 14.0 available version even if 12.0 is also available', function (done) {
- versionTest(['14.0', '12.0', '4.0'], '14.0', done);
+ it('spec.2 should select 14.0 available version even if 12.0 is also available', function () {
+ return versionTest(['14.0', '12.0', '4.0'], '14.0');
});
- it('spec.3 should find 12.0 available version if 14.0 is unavailable', function (done) {
- versionTest(['12.0', '4.0'], '12.0', done);
+ it('spec.3 should find 12.0 available version if 14.0 is unavailable', function () {
+ return versionTest(['12.0', '4.0'], '12.0');
});
- it('spec.4 should find 4.0 available version if neither 12.0 nor 14.0 are available', function (done) {
- versionTest(['4.0'], '4.0', done);
+ it('spec.4 should find 4.0 available version if neither 12.0 nor 14.0 are available', function () {
+ return versionTest(['4.0'], '4.0');
});
- it('spec.5 should produce an error if there is no available versions', function (done) {
- var resolveSpy = jasmine.createSpy();
-
+ it('spec.5 should produce an error if there is no available versions', function () {
buildTools.__set__('checkMSBuildVersion', checkMSBuildVersionFake.bind(null, []));
- buildTools.findAvailableVersion()
- .then(resolveSpy, function (error) {
- expect(error).toBeDefined();
- })
- .finally(function () {
- expect(resolveSpy).not.toHaveBeenCalled();
- done();
- });
+ return buildTools.findAvailableVersion().then(
+ () => fail('Expected promise to be rejected'),
+ error => expect(error).toBeDefined()
+ );
});
});
@@ -111,7 +102,7 @@
'MSBuildToolsPath\tREG_SZ\t' + fakeToolsPath(version) + '\r\n\r\n')
);
- checkMSBuildVersion(version).then(function (actual) {
+ return checkMSBuildVersion(version).then(function (actual) {
expect(actual.version).toBe(version);
expect(actual.path).toBe(fakeToolsPath(version));
});
@@ -120,7 +111,7 @@
it('spec.7 should return null if no tools found for version', function () {
spawnSpy.and.returnValue(Q.resolve('ERROR: The system was unable to find the specified registry key or value.'));
- checkMSBuildVersion('14.0').then(function (actual) {
+ return checkMSBuildVersion('14.0').then(function (actual) {
expect(actual).not.toBeDefined();
});
});
@@ -128,7 +119,7 @@
it('spec.8 should return null on internal error', function () {
spawnSpy.and.returnValue(Q.reject());
- checkMSBuildVersion('14.0').then(function (actual) {
+ return checkMSBuildVersion('14.0').then(function (actual) {
expect(actual).not.toBeDefined();
});
});
@@ -206,9 +197,6 @@
var fakeVersion = '22.0.12635.5';
var fakeVersionParsed = '22.0';
- var fail = jasmine.createSpy('fail');
- var success = jasmine.createSpy('success');
-
var spawnOriginal = buildTools.__get__('spawn');
var spawnSpy = jasmine.createSpy('spawn');
@@ -220,29 +208,23 @@
buildTools.__set__('spawn', spawnOriginal);
});
- it('should return MSBuildTools instance', function (done) {
+ it('should return MSBuildTools instance', function () {
spawnSpy.and.returnValue(Q(fakeVersion));
- buildTools.getMSBuildToolsAt(fakePath)
+ return buildTools.getMSBuildToolsAt(fakePath)
.then(function (tools) {
expect(tools).toEqual(jasmine.any(MSBuildTools));
expect(tools.version).toBe(fakeVersionParsed);
expect(tools.path).toBe(fakePath);
- }, fail)
- .done(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
- it('should reject promise if no msbuild found', function (done) {
+ it('should reject promise if no msbuild found', function () {
spawnSpy.and.returnValue(Q.reject());
- buildTools.getMSBuildToolsAt(messyPath)
- .then(success, fail)
- .done(function () {
- expect(success).not.toHaveBeenCalled();
- done();
- });
+ return buildTools.getMSBuildToolsAt(messyPath).then(
+ () => fail('Expected promise to be rejected'),
+ () => expect().nothing()
+ );
});
});
diff --git a/spec/unit/build.spec.js b/spec/unit/build.spec.js
index e9d81d2..4023ea1 100644
--- a/spec/unit/build.spec.js
+++ b/spec/unit/build.spec.js
@@ -108,21 +108,17 @@
build.__set__('ConfigParser', configParserOriginal);
});
- it('spec.1 should reject if not launched from project directory', function (done) {
- var rejectSpy = jasmine.createSpy();
+ it('spec.1 should reject if not launched from project directory', function () {
var buildSpy = jasmine.createSpy();
// utils.isCordovaProject is a spy, so we can call andReturn directly on it
utils.isCordovaProject.and.returnValue(false);
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: buildSpy, path: testPath }]);
- build.run([ 'node', buildPath, '--release', '--debug' ])
- .fail(rejectSpy)
- .finally(function () {
- expect(rejectSpy).toHaveBeenCalled();
- expect(buildSpy).not.toHaveBeenCalled();
- done();
- });
+ return build.run([ 'node', buildPath, '--release', '--debug' ]).then(
+ () => fail('Expected promise to be rejected'),
+ () => expect(buildSpy).not.toHaveBeenCalled()
+ );
});
it('spec.2 should throw if both debug and release args specified', function () {
@@ -145,12 +141,12 @@
}).toThrow();
});
- it('should respect build configuration from \'buildConfig\' option', function (done) {
+ it('should respect build configuration from \'buildConfig\' option', function () {
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: jasmine.createSpy(), path: testPath }]);
var buildConfigPath = path.resolve(__dirname, 'fixtures/fakeBuildConfig.json');
- build.run({ buildConfig: buildConfigPath })
+ return build.run({ buildConfig: buildConfigPath })
.finally(function () {
expect(prepare.updateBuildConfig).toHaveBeenCalled();
var buildOpts = prepare.updateBuildConfig.calls.argsFor(0)[0];
@@ -163,56 +159,49 @@
expect(buildOpts[key]).toBeDefined();
expect(buildOpts[key]).toEqual(buildConfig[key]);
});
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
});
}, 20000);
- it('spec.4 should call buildProject of MSBuildTools with buildType = "release" if called with --release argument', function (done) {
+ it('spec.4 should call buildProject of MSBuildTools with buildType = "release" if called with --release argument', function () {
var buildSpy = jasmine.createSpy().and.callFake(function (solutionFile, buildType, buildArch) {
expect(buildType).toBe('release');
});
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: buildSpy, path: testPath }]);
- build.run({ release: true })
+ return build.run({ release: true })
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- it('spec.5 should call buildProject of MSBuildTools with buildType = "debug" if called without arguments', function (done) {
+ it('spec.5 should call buildProject of MSBuildTools with buildType = "debug" if called without arguments', function () {
var buildSpy = jasmine.createSpy().and.callFake(function (solutionFile, buildType, buildArch) {
expect(buildType).toBe('debug');
});
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: buildSpy, path: testPath }]);
- build.run([ 'node', buildPath ])
+ return build.run([ 'node', buildPath ])
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- it('spec.6 should call buildProject of MSBuildTools with buildArch = "arm" if called with --archs="arm" argument', function (done) {
+ it('spec.6 should call buildProject of MSBuildTools with buildArch = "arm" if called with --archs="arm" argument', function () {
var buildSpy = jasmine.createSpy().and.callFake(function (solutionFile, buildType, buildArch) {
expect(buildArch).toBe('arm');
});
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: buildSpy, path: testPath }]);
- build.run({ archs: 'arm' })
+ return build.run({ archs: 'arm' })
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- it('spec.7 should call buildProject of MSBuildTools once for all architectures if called with --archs="arm x86 x64 anycpu" argument', function (done) {
+ it('spec.7 should call buildProject of MSBuildTools once for all architectures if called with --archs="arm x86 x64 anycpu" argument', function () {
var armBuild = jasmine.createSpy();
var x86Build = jasmine.createSpy();
var x64Build = jasmine.createSpy();
@@ -244,100 +233,85 @@
}
}]);
- build.run({ archs: 'arm x86 x64 anycpu', argv: ['--phone'] })
+ return build.run({ archs: 'arm x86 x64 anycpu', argv: ['--phone'] })
.finally(function () {
expect(armBuild).toHaveBeenCalled();
expect(x86Build).toHaveBeenCalled();
expect(x64Build).toHaveBeenCalled();
expect(anyCpuBuild).toHaveBeenCalled();
- done();
});
});
- xit('spec.8 should fail buildProject if built with MSBuildTools version 4.0', function (done) {
+ xit('spec.8 should fail buildProject if built with MSBuildTools version 4.0', function () {
var buildSpy = jasmine.createSpy();
- var errorSpy = jasmine.createSpy();
createFindAllAvailableVersionsMock([{ version: '4.0', buildProject: buildSpy, path: testPath }]);
createConfigParserMock('8.0');
- build.run({ argv: ['--win'] })
- .fail(function (error) {
- errorSpy();
+ return build.run({ argv: ['--win'] }).then(
+ () => fail('Expected promise to be rejected'),
+ error => {
expect(error).toBeDefined();
- })
- .finally(function () {
- expect(errorSpy).toHaveBeenCalled();
expect(buildSpy).not.toHaveBeenCalled();
- done();
- });
+ }
+ );
});
- it('spec.9 should call buildProject of MSBuildTools if built for windows 8.1', function (done) {
+ it('spec.9 should call buildProject of MSBuildTools if built for windows 8.1', function () {
var buildSpy = jasmine.createSpy();
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: buildSpy, path: testPath }]);
createConfigParserMock('8.1');
- build.run({ argv: ['--win'] })
+ return build.run({ argv: ['--win'] })
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- xit('spec.10 should throw an error if windows-target-version has unsupported value', function (done) {
+ xit('spec.10 should throw an error if windows-target-version has unsupported value', function () {
var buildSpy = jasmine.createSpy();
- var errorSpy = jasmine.createSpy();
createFindAvailableVersionMock('14.0', testPath, buildSpy);
createConfigParserMock('unsupported value here');
- build.run({ argv: ['--win'] })
- .fail(function (error) {
- errorSpy();
+ return build.run({ argv: ['--win'] }).then(
+ () => fail('Expected promise to be rejected'),
+ error => {
expect(error).toBeDefined();
- })
- .finally(function () {
- expect(errorSpy).toHaveBeenCalled();
expect(buildSpy).not.toHaveBeenCalled();
- done();
- });
+ }
+ );
});
- it('spec.11 should call buildProject of MSBuildTools if built for windows phone 8.1', function (done) {
+ it('spec.11 should call buildProject of MSBuildTools if built for windows phone 8.1', function () {
var buildSpy = jasmine.createSpy();
createFindAllAvailableVersionsMock([{ version: '14.0', buildProject: buildSpy, path: testPath }]);
createConfigParserMock(null, '8.1');
- build.run({ argv: ['--phone'] })
+ return build.run({ argv: ['--phone'] })
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- xit('spec.12 should throw an error if windows-phone-target-version has unsupported value', function (done) {
+ xit('spec.12 should throw an error if windows-phone-target-version has unsupported value', function () {
var buildSpy = jasmine.createSpy();
- var errorSpy = jasmine.createSpy();
createFindAvailableVersionMock('14.0', testPath, buildSpy);
createConfigParserMock(null, 'unsupported value here');
- build.run({ argv: ['--phone'] })
- .fail(function (error) {
- errorSpy();
+ return build.run({ argv: ['--phone'] }).then(
+ () => fail('Expected promise to be rejected'),
+ error => {
expect(error).toBeDefined();
- })
- .finally(function () {
- expect(errorSpy).toHaveBeenCalled();
expect(buildSpy).not.toHaveBeenCalled();
- done();
- });
+ }
+ );
});
- it('spec.13a should be able to override target via --appx parameter', function (done) {
+ it('spec.13a should be able to override target via --appx parameter', function () {
var buildSpy = jasmine.createSpy().and.callFake(function (solutionFile, buildType, buildArch) {
// check that we build Windows 10 and not Windows 8.1
expect(solutionFile.toLowerCase()).toMatch('cordovaapp.windows10.jsproj');
@@ -347,14 +321,13 @@
// provision config to target Windows 8.1
createConfigParserMock('8.1', '8.1');
// explicitly specify Windows 10 as target
- build.run({ argv: ['--appx=uap'] })
+ return build.run({ argv: ['--appx=uap'] })
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- it('spec.13b should be able to override target via --appx parameter', function (done) {
+ it('spec.13b should be able to override target via --appx parameter', function () {
var buildSpy = jasmine.createSpy().and.callFake(function (solutionFile, buildType, buildArch) {
// check that we build Windows 10 and not Windows 8.1
expect(solutionFile.toLowerCase()).toMatch('cordovaapp.windows10.jsproj');
@@ -364,14 +337,13 @@
// provision config to target Windows 8.1
createConfigParserMock('8.1', '8.1');
// explicitly specify Windows 10 as target
- build.run({ argv: ['--appx=uwp'] })
+ return build.run({ argv: ['--appx=uwp'] })
.finally(function () {
expect(buildSpy).toHaveBeenCalled();
- done();
});
});
- it('spec.14a should use user-specified msbuild if VSINSTALLDIR variable is set', function (done) {
+ it('spec.14a should use user-specified msbuild if VSINSTALLDIR variable is set', function () {
var customMSBuildPath = '/some/path';
var msBuildBinPath = path.join(customMSBuildPath, 'MSBuild/15.0/Bin');
var customMSBuildVersion = '15.0';
@@ -387,20 +359,17 @@
buildProject: jasmine.createSpy('buildProject').and.returnValue(Q())
}));
- var fail = jasmine.createSpy('fail');
-
- build.run({})
- .fail(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
+ return build.run({})
+ .then(() => {
expect(MSBuildTools.getMSBuildToolsAt).toHaveBeenCalledWith(msBuildBinPath);
+ })
+ .finally(function () {
delete process.env.VSINSTALLDIR;
process.env.MSBUILDDIR = backupMSBUILDDIR;
- done();
});
});
- it('spec.14b should use user-specified msbuild if MSBUILDDIR variable is set', function (done) {
+ it('spec.14b should use user-specified msbuild if MSBUILDDIR variable is set', function () {
var msBuildBinPath = path.join('/some/path', 'MSBuild/15.0/Bin');
var customMSBuildVersion = '15.0';
process.env.MSBUILDDIR = msBuildBinPath;
@@ -415,50 +384,39 @@
buildProject: jasmine.createSpy('buildProject').and.returnValue(Q())
}));
- var fail = jasmine.createSpy('fail');
-
- build.run({})
- .fail(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
+ return build.run({})
+ .then(() => {
expect(MSBuildTools.getMSBuildToolsAt).toHaveBeenCalledWith(msBuildBinPath);
+ })
+ .finally(function () {
delete process.env.MSBUILDDIR;
process.env.VSINSTALLDIR = backupVSINSTALLDIR;
- done();
});
});
- it('spec.15a should choose latest version if there are multiple versions available with minor version difference', function (done) {
- var fail = jasmine.createSpy('fail');
+ it('spec.15a should choose latest version if there are multiple versions available with minor version difference', function () {
var buildTools14 = { version: '14.0', buildProject: jasmine.createSpy('buildTools14'), path: testPath };
var buildTools15 = { version: '15.0', buildProject: jasmine.createSpy('buildTools15'), path: testPath };
var buildTools151 = { version: '15.1', buildProject: jasmine.createSpy('buildTools151'), path: testPath };
createFindAllAvailableVersionsMock([buildTools14, buildTools15, buildTools151]);
// explicitly specify Windows 10 as target
- build.run({ argv: ['--appx=uap'] })
- .fail(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
+ return build.run({ argv: ['--appx=uap'] })
+ .then(() => {
expect(buildTools151.buildProject).toHaveBeenCalled();
- done();
});
});
- it('spec.15b should choose latest version if there are multiple versions available with minor version difference', function (done) {
- var fail = jasmine.createSpy('fail');
+ it('spec.15b should choose latest version if there are multiple versions available with minor version difference', function () {
var buildTools14 = { version: '14.0', buildProject: jasmine.createSpy('buildTools14'), path: testPath };
var buildTools15 = { version: '15.0', buildProject: jasmine.createSpy('buildTools15'), path: testPath };
var buildTools151 = { version: '15.1', buildProject: jasmine.createSpy('buildTools151'), path: testPath };
createFindAllAvailableVersionsMock([buildTools14, buildTools15, buildTools151]);
// explicitly specify Windows 10 as target
- build.run({ argv: ['--appx=uwp'] })
- .fail(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
+ return build.run({ argv: ['--appx=uap'] })
+ .then(() => {
expect(buildTools151.buildProject).toHaveBeenCalled();
- done();
});
});
});
@@ -502,8 +460,7 @@
});
});
- it('should pass buildFlags directly to MSBuild', function (done) {
- var fail = jasmine.createSpy('fail');
+ it('should pass buildFlags directly to MSBuild', function () {
var buildTools = { version: '14.0', buildProject: jasmine.createSpy('buildProject').and.returnValue(Q()), path: testPath };
var buildOptions = {
argv: ['--buildFlag', 'foo=bar']
@@ -511,15 +468,11 @@
createFindAllAvailableVersionsMock([buildTools]);
- build.run(buildOptions)
- .fail(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
+ return build.run(buildOptions)
+ .then(() => {
// CB-12416 AppxBundle=Never is present because we are not building a bundle
expect(buildTools.buildProject).toHaveBeenCalledWith(jasmine.any(String),
jasmine.any(String), jasmine.any(String), [ 'foo=bar', '/p:AppxBundle=Never' ]);
-
- done();
});
});
});
diff --git a/spec/unit/check_reqs.spec.js b/spec/unit/check_reqs.spec.js
index 433177c..e7a65a1 100644
--- a/spec/unit/check_reqs.spec.js
+++ b/spec/unit/check_reqs.spec.js
@@ -89,75 +89,59 @@
check_reqs.__set__('config', originalconfig);
});
- it('Test #002 : that should return a promise, fulfilled with an array of Requirements', function (done) {
+ it('Test #002 : that should return a promise, fulfilled with an array of Requirements', function () {
check_reqs.__set__('requirements', fakeRequirements);
check_reqs.__set__('checkFns', fakeCheckFns);
check_reqs.__set__('config', fakeConfig);
var checkResult = check_reqs.check_all();
expect(Q.isPromise(checkResult)).toBeTruthy();
- checkResult.then(function (result) {
+ return checkResult.then(function (result) {
expect(result instanceof Array).toBeTruthy();
expect(result.length).toBe(3);
result.forEach(function (resultItem) {
expect(resultItem instanceof Requirement).toBeTruthy();
expect(resultItem.installed).toBeTruthy();
});
- done();
});
});
- it('Test #003 : that should not reject if one of requirements is not installed', function (done) {
+ it('Test #003 : that should not reject if one of requirements is not installed', function () {
check_reqs.__set__('requirements', fakeRequirements);
fakeCheckFns[0] = function () { return Q.reject('Error message'); };
check_reqs.__set__('checkFns', fakeCheckFns);
check_reqs.__set__('config', fakeConfig);
- check_reqs.check_all()
+ return check_reqs.check_all()
.then(function (requirements) {
expect(requirements.length).toBe(3);
expect(requirements[0].installed).toBeFalsy();
- done();
- })
- .catch(function (error) {
- expect(error).not.toBeDefined();
- done();
});
});
- it('Test #004 : that should reject if one of checks has internal erorrs', function (done) {
+ it('Test #004 : that should reject if one of checks has internal erorrs', function () {
check_reqs.__set__('requirements', fakeRequirements);
fakeCheckFns[0] = checkSpy.and.throwError('Fatal error');
check_reqs.__set__('checkFns', fakeCheckFns);
check_reqs.__set__('config', fakeConfig);
- check_reqs.check_all()
- .then(function (requirements) {
- expect(requirements).not.toBeDefined();
- done();
- })
- .catch(function (error) {
- expect(error).toMatch('Fatal error');
- done();
- });
+ return check_reqs.check_all().then(
+ () => fail('Expected promise to be rejected'),
+ error => expect(error).toMatch('Fatal error')
+ );
});
- it('Test #005 : that should not run other requirements checks if `fatal` requirement isn\'t installed', function (done) {
+ it('Test #005 : that should not run other requirements checks if `fatal` requirement isn\'t installed', function () {
check_reqs.__set__('requirements', fakeRequirements);
// The second requirement is fatal, so we're setting up second check to fail
fakeCheckFns[1] = checkSpy.and.returnValue(Q.reject('Error message'));
check_reqs.__set__('checkFns', fakeCheckFns);
check_reqs.__set__('config', fakeConfig);
- check_reqs.check_all()
+ return check_reqs.check_all()
.then(function (requirements) {
expect(requirements.length).toBe(2);
expect(requirements[1].isFatal).toBeTruthy();
expect(checkSpy.calls.count()).toBe(2);
- done();
- })
- .catch(function (error) {
- expect(error).not.toBeDefined();
- done();
});
});
});
diff --git a/spec/unit/clean.spec.js b/spec/unit/clean.spec.js
index c68b012..72b97cb 100644
--- a/spec/unit/clean.spec.js
+++ b/spec/unit/clean.spec.js
@@ -32,7 +32,7 @@
shell.rm('-rf', currentProject);
});
- it('spec 1. should remove icons when ran inside Cordova project', function (done) {
+ it('spec 1. should remove icons when ran inside Cordova project', function () {
var config = {
platform: 'windows',
root: currentProject,
@@ -43,17 +43,9 @@
}
};
- var rejected = jasmine.createSpy().and.callFake(function (err) {
- // Log error:
- expect(err).not.toBeDefined();
- });
- prepareModule.clean.call(config)
+ return prepareModule.clean.call(config)
.then(function () {
expect(fs.existsSync(iconPath)).toBeFalsy();
- }, rejected)
- .finally(function () {
- expect(rejected).not.toHaveBeenCalled();
- done();
});
});
});
diff --git a/spec/unit/deployment.spec.js b/spec/unit/deployment.spec.js
index fb62d48..a93b63f 100644
--- a/spec/unit/deployment.spec.js
+++ b/spec/unit/deployment.spec.js
@@ -98,54 +98,38 @@
}
});
- it('Test #002 : enumerateDevices returns a valid set of objects', function (done) {
+ it('Test #002 : enumerateDevices returns a valid set of objects', function () {
var deploymentTool = deployment.getDeploymentTool('10.0');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
expect(deviceList.length).toBe(3);
expect(deviceList[0].name).toBe('Lumia 1520 (RM-940)');
expect(deviceList[0].index).toBe(0);
expect(deviceList[0].type).toBe('device');
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
});
});
- it('Test #003 : installAppPackage passes the correct set of parameters', function (done) {
+ it('Test #003 : installAppPackage passes the correct set of parameters', function () {
var deploymentTool = deployment.getDeploymentTool('10.0');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ false);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ false);
});
});
- it('Test #004 : installAppPackage passes the correct set of parameters when updating', function (done) {
+ it('Test #004 : installAppPackage passes the correct set of parameters when updating', function () {
var deploymentTool = deployment.getDeploymentTool('10.0');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ true);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ true);
});
});
- it('Test #005 : uninstallAppPackage passes the correct set of parameters', function (done) {
+ it('Test #005 : uninstallAppPackage passes the correct set of parameters', function () {
var deploymentTool = deployment.getDeploymentTool('10.0');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
deploymentTool.uninstallAppPackage(TEST_APP_PACKAGE_ID, deviceList[2]);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
});
});
});
@@ -195,9 +179,9 @@
}
});
- it('Test #006 : enumerateDevices returns a valid set of objects', function (done) {
+ it('Test #006 : enumerateDevices returns a valid set of objects', function () {
var deploymentTool = deployment.getDeploymentTool('8.1');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
expect(deviceList.length).toBe(12);
expect(deviceList[0].name).toBe('Device');
@@ -206,70 +190,46 @@
expect(deviceList[5].name).toBe('Mobile Emulator 10.0.10150.0 1080p 6 inch 2GB');
expect(deviceList[5].index).toBe(5);
expect(deviceList[5].type).toBe('emulator');
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
});
});
- it('Test #007 : installAppPackage passes the correct set of parameters', function (done) {
+ it('Test #007 : installAppPackage passes the correct set of parameters', function () {
var deploymentTool = deployment.getDeploymentTool('8.1');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ false);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ false);
});
});
- it('Test #008 : installAppPackage passes the correct set of parameters when updating', function (done) {
+ it('Test #008 : installAppPackage passes the correct set of parameters when updating', function () {
var deploymentTool = deployment.getDeploymentTool('8.1');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ true);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ false, /* shouldUpdate */ true);
});
});
- it('Test #009 : installAppPackage passes the correct set of parameters when launching', function (done) {
+ it('Test #009 : installAppPackage passes the correct set of parameters when launching', function () {
var deploymentTool = deployment.getDeploymentTool('8.1');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ true, /* shouldUpdate */ false);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ true, /* shouldUpdate */ false);
});
});
- it('Test #010 : installAppPackage passes the correct set of parameters when updating and launching', function (done) {
+ it('Test #010 : installAppPackage passes the correct set of parameters when updating and launching', function () {
var deploymentTool = deployment.getDeploymentTool('8.1');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ true, /* shouldUpdate */ true);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.installAppPackage(TEST_APP_PACKAGE_NAME, deviceList[0], /* shouldLaunch */ true, /* shouldUpdate */ true);
});
});
- it('Test #011 : uninstallAppPackage passes the correct set of parameters', function (done) {
+ it('Test #011 : uninstallAppPackage passes the correct set of parameters', function () {
var deploymentTool = deployment.getDeploymentTool('8.1');
- deploymentTool.enumerateDevices()
+ return deploymentTool.enumerateDevices()
.then(function (deviceList) {
- deploymentTool.uninstallAppPackage(TEST_APP_PACKAGE_ID, deviceList[5]);
- done();
- }).fail(function err (errMsg) {
- expect(errMsg).toBeUndefined();
- done();
+ return deploymentTool.uninstallAppPackage(TEST_APP_PACKAGE_ID, deviceList[5]);
});
});
});
diff --git a/spec/unit/package.spec.js b/spec/unit/package.spec.js
index 03bac51..8bf4474 100644
--- a/spec/unit/package.spec.js
+++ b/spec/unit/package.spec.js
@@ -19,7 +19,6 @@
var path = require('path');
var rewire = require('rewire');
var shell = require('shelljs');
-var Q = require('q');
var platformRoot = '../../template';
var pkgRoot = './template/';
var pkgPath = path.join(pkgRoot, 'AppPackages');
@@ -44,72 +43,48 @@
shell.cp('-R', testPkgPath, pkgRoot);
});
- it('spec.1 should find windows anycpu debug package', function (done) {
- var rejected = jasmine.createSpy();
-
- pkg.getPackage('windows', 'debug', 'anycpu')
+ it('spec.1 should find windows anycpu debug package', function () {
+ return pkg.getPackage('windows', 'debug', 'anycpu')
.then(function (pkgInfo) {
expect(pkgInfo.type).toBe('windows');
expect(pkgInfo.buildtype).toBe('debug');
expect(pkgInfo.arch).toBe('anycpu');
expect(pkgInfo.script).toBeDefined();
- }, function (err) {
- console.error(err);
- rejected();
- })
- .finally(function () {
- expect(rejected).not.toHaveBeenCalled();
- done();
});
});
- it('spec.2 should find windows phone anycpu debug package', function (done) {
- var rejected = jasmine.createSpy();
-
- pkg.getPackage('phone', 'debug', 'anycpu')
+ it('spec.2 should find windows phone anycpu debug package', function () {
+ return pkg.getPackage('phone', 'debug', 'anycpu')
.then(function (pkgInfo) {
expect(pkgInfo.type).toBe('phone');
expect(pkgInfo.buildtype).toBe('debug');
expect(pkgInfo.arch).toBe('anycpu');
expect(pkgInfo.script).toBeDefined();
- }, rejected)
- .finally(function () {
- expect(rejected).not.toHaveBeenCalled();
- done();
});
});
- it('spec.3 should not find windows 10 anycpu debug package', function (done) {
- var resolved = jasmine.createSpy();
-
- pkg.getPackage('windows10', 'debug', 'anycpu')
- .then(resolved)
- .finally(function () {
- expect(resolved).not.toHaveBeenCalled();
- done();
- });
+ it('spec.3 should not find windows 10 anycpu debug package', function () {
+ return pkg.getPackage('windows10', 'debug', 'anycpu')
+ .then(
+ () => fail('Expected promise to be rejected'),
+ () => expect().nothing()
+ );
});
- it('spec.4 should not find windows anycpu release package', function (done) {
- var resolved = jasmine.createSpy();
-
- pkg.getPackage('windows', 'release', 'anycpu')
- .then(resolved)
- .finally(function () {
- expect(resolved).not.toHaveBeenCalled();
- done();
- });
+ it('spec.4 should not find windows anycpu release package', function () {
+ return pkg.getPackage('windows', 'release', 'anycpu')
+ .then(
+ () => fail('Expected promise to be rejected'),
+ () => expect().nothing()
+ );
});
- it('spec.5 should not find windows x86 debug package', function (done) {
- var resolved = jasmine.createSpy();
-
- pkg.getPackage('windows', 'debug', 'x86')
- .then(resolved)
- .finally(function () {
- expect(resolved).not.toHaveBeenCalled();
- done();
- });
+ it('spec.5 should not find windows x86 debug package', function () {
+ return pkg.getPackage('windows', 'debug', 'x86')
+ .then(
+ () => fail('Expected promise to be rejected'),
+ () => expect().nothing()
+ );
});
it('end', function () {
@@ -156,27 +131,7 @@
});
describe('getAppId method', function () {
- it('spec.10 should properly get phoneProductId value from manifest', function (done) {
- var resolve = jasmine.createSpy();
-
- Q(pkg.getAppId(pkgRoot))
- .then(resolve)
- .finally(function () {
- expect(resolve).toHaveBeenCalledWith('$guid1$');
- done();
- });
- });
-});
-
-describe('getPackageName method', function () {
- it('spec.11 should properly get Application Id value from manifest', function (done) {
- var resolve = jasmine.createSpy();
-
- Q(pkg.getAppId(pkgRoot))
- .then(resolve)
- .finally(function () {
- expect(resolve).toHaveBeenCalledWith('$guid1$');
- done();
- });
+ it('spec.11 should properly get Application Id value from manifest', function () {
+ expect(pkg.getAppId(pkgRoot)).toBe('$guid1$');
});
});
diff --git a/spec/unit/run.spec.js b/spec/unit/run.spec.js
index 425396c..9b85396 100644
--- a/spec/unit/run.spec.js
+++ b/spec/unit/run.spec.js
@@ -68,7 +68,7 @@
run.__set__('ranWithElevatedPermissions', ranWithElevatedPermissionsOriginal);
});
- it('spec.1 should not run if not launched from project directory', function (done) {
+ it('spec.1 should not run if not launched from project directory', function () {
var buildRun = jasmine.createSpy();
run.__set__('utils.isCordovaProject', isCordovaProjectFalse);
@@ -77,14 +77,13 @@
return Q.reject(); // rejecting to break run chain
});
- run.run([ 'node', buildPath ])
- .finally(function () {
- expect(buildRun).not.toHaveBeenCalled();
- done();
- });
+ return run.run([ 'node', buildPath ]).then(
+ () => fail('Expected promise to be rejected'),
+ () => expect(buildRun).not.toHaveBeenCalled()
+ );
});
- it('spec.2 should not run if both debug and release args are specified', function (done) {
+ it('spec.2 should not run if both debug and release args are specified', function () {
var buildRun = jasmine.createSpy();
run.__set__('utils.isCordovaProject', isCordovaProjectTrue);
@@ -93,14 +92,13 @@
return Q.reject(); // rejecting to break run chain
});
- run.run({ release: true, debug: true })
- .finally(function () {
- expect(buildRun).not.toHaveBeenCalled();
- done();
- });
+ return run.run({ release: true, debug: true }).then(
+ () => fail('Expected promise to be rejected'),
+ () => expect(buildRun).not.toHaveBeenCalled()
+ );
});
- it('spec.3 should not run if device and emulator args are combined', function (done) {
+ it('spec.3 should not run if device and emulator args are combined', function () {
var buildRun = jasmine.createSpy();
run.__set__('utils.isCordovaProject', isCordovaProjectTrue);
@@ -109,14 +107,13 @@
return Q.reject(); // rejecting to break run chain
});
- run.run({ device: true, emulator: true })
- .finally(function () {
- expect(buildRun).not.toHaveBeenCalled();
- done();
- });
+ return run.run({ device: true, emulator: true }).then(
+ () => fail('Expected promise to be rejected'),
+ () => expect(buildRun).not.toHaveBeenCalled()
+ );
});
- it('spec.4 should not run if device and target args are combined', function (done) {
+ it('spec.4 should not run if device and target args are combined', function () {
var buildRun = jasmine.createSpy();
run.__set__('utils.isCordovaProject', isCordovaProjectTrue);
@@ -125,18 +122,16 @@
return Q.reject(); // rejecting to break run chain
});
- run.run({ device: true, target: 'sometargethere' })
- .finally(function () {
- expect(buildRun).not.toHaveBeenCalled();
- done();
- });
+ return run.run({ device: true, target: 'sometargethere' }).then(
+ () => fail('Expected promise to be rejected'),
+ () => expect(buildRun).not.toHaveBeenCalled()
+ );
});
- it('spec.5 should build and deploy on phone if --phone arg specified', function (done) {
+ it('spec.5 should build and deploy on phone if --phone arg specified', function () {
var build = jasmine.createSpy();
var deployToPhone = jasmine.createSpy();
var deployToDesktop = jasmine.createSpy();
- var failed = jasmine.createSpy();
run.__set__('utils.isCordovaProject', isCordovaProjectTrue);
run.__set__('build.run', function () {
@@ -167,18 +162,15 @@
return Q();
});
- run.run([ 'node', buildPath, '--phone', '--break' ])
- .catch(failed)
- .finally(function () {
- expect(failed).not.toHaveBeenCalled();
+ return run.run([ 'node', buildPath, '--phone', '--break' ])
+ .then(() => {
expect(build).toHaveBeenCalled();
expect(deployToPhone).toHaveBeenCalled();
expect(deployToDesktop).not.toHaveBeenCalled();
- done();
});
});
- it('spec.6 should build and deploy on desktop if --phone arg is not specified', function (done) {
+ it('spec.6 should build and deploy on desktop if --phone arg is not specified', function () {
var build = jasmine.createSpy();
var deployToPhone = jasmine.createSpy();
var deployToDesktop = jasmine.createSpy();
@@ -212,16 +204,15 @@
return Q();
});
- run.run([ 'node', buildPath ])
+ return run.run([ 'node', buildPath ])
.finally(function () {
expect(build).toHaveBeenCalled();
expect(deployToDesktop).toHaveBeenCalled();
expect(deployToPhone).not.toHaveBeenCalled();
- done();
});
});
- it('spec. 7 should not call build if --nobuild specified', function (done) {
+ it('spec. 7 should not call build if --nobuild specified', function () {
var build = jasmine.createSpy();
var deployToDesktop = jasmine.createSpy();
@@ -241,15 +232,14 @@
return Q();
});
- run.run({ nobuild: true })
+ return run.run({ nobuild: true })
.finally(function () {
expect(deployToDesktop).toHaveBeenCalled();
expect(build).not.toHaveBeenCalled();
- done();
});
});
- it('spec.8 should accept --archs parameter either as cli or as platform arg', function (done) {
+ it('spec.8 should accept --archs parameter either as cli or as platform arg', function () {
spyOn(utils, 'isCordovaProject').and.returnValue(true);
spyOn(packages, 'getPackage').and.returnValue(Q({ arch: 'arm' }));
@@ -258,12 +248,7 @@
var anyString = jasmine.any(String);
var expectedDeployOptions = jasmine.objectContaining({ arch: 'arm' });
- var fail = jasmine.createSpy('fail')
- .and.callFake(function (err) {
- console.error(err);
- });
-
- run.run({ nobuild: true, argv: ['--archs=arm'] })
+ return run.run({ nobuild: true, argv: ['--archs=arm'] })
.then(function () {
expect(packages.getPackage).toHaveBeenCalledWith(anyString, anyString, 'arm');
expect(packages.deployToDesktop).toHaveBeenCalledWith(expectedDeployOptions, anyString, anyString);
@@ -274,15 +259,10 @@
.then(function () {
expect(packages.getPackage).toHaveBeenCalledWith(anyString, anyString, 'arm');
expect(packages.deployToDesktop).toHaveBeenCalledWith(expectedDeployOptions, anyString, anyString);
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
- it('spec.9 should fall back to anycpu if --archs parameter is not specified', function (done) {
+ it('spec.9 should fall back to anycpu if --archs parameter is not specified', function () {
spyOn(utils, 'isCordovaProject').and.returnValue(true);
spyOn(packages, 'getPackage').and.returnValue(Q({ arch: 'anycpu' }));
@@ -291,17 +271,10 @@
var anyString = jasmine.any(String);
var expectedDeployOptions = jasmine.objectContaining({ arch: 'anycpu' });
- var fail = jasmine.createSpy('fail');
-
- run.run({ nobuild: true })
+ return run.run({ nobuild: true })
.then(function () {
expect(packages.getPackage).toHaveBeenCalledWith(anyString, anyString, 'anycpu');
expect(packages.deployToDesktop).toHaveBeenCalledWith(expectedDeployOptions, anyString, anyString);
- })
- .catch(fail)
- .finally(function () {
- expect(fail).not.toHaveBeenCalled();
- done();
});
});
});