Mock out fetch for robust and faster tests
diff --git a/package.json b/package.json
index 9b1425c..a4eca05 100644
--- a/package.json
+++ b/package.json
@@ -43,6 +43,7 @@
"eslint-plugin-promise": "^3.5.0",
"eslint-plugin-standard": "^3.0.1",
"jasmine": "^3.1.0",
+ "rewire": "^4.0.1",
"semver": "^5.3.0"
},
"scripts": {
diff --git a/spec/create.spec.js b/spec/create.spec.js
index 3100662..754665d 100644
--- a/spec/create.spec.js
+++ b/spec/create.spec.js
@@ -23,9 +23,10 @@
var shell = require('shelljs');
var semver = require('semver');
+var rewire = require('rewire');
var requireFresh = require('import-fresh');
-var create = require('..');
+var create = rewire('..');
var helpers = require('./helpers');
var events = require('cordova-common').events;
var CordovaError = require('cordova-common').CordovaError;
@@ -43,6 +44,22 @@
// Global configuration paths
var global_config_path = process.env.CORDOVA_HOME || path.join(os.homedir(), '.cordova');
+function createWith (rewiring) {
+ return (...args) => create.__with__(rewiring)(() => create(...args));
+}
+
+// Calls create with mocked fetch to not depend on the outside world
+function createWithMockFetch (dir, id, name, cfg, events) {
+ const mockFetchDest = path.join(tmpDir, 'mockFetchDest');
+ const templateDir = path.dirname(require.resolve('cordova-app-hello-world'));
+ const fetchSpy = jasmine.createSpy('fetchSpy')
+ .and.callFake(() => Promise.resolve(mockFetchDest));
+
+ shell.cp('-R', templateDir, mockFetchDest);
+ return createWith({fetch: fetchSpy})(dir, id, name, cfg, events)
+ .then(() => fetchSpy);
+}
+
// Expect promise to get rejected with a reason matching expectedReason
function expectRejection (promise, expectedReason) {
return promise.then(
@@ -185,9 +202,13 @@
}
}
};
- return create(project, appId, appName, config, events)
+ return createWithMockFetch(project, appId, appName, config, events)
+ .then(fetchSpy => {
+ expect(fetchSpy).toHaveBeenCalledTimes(1);
+ expect(fetchSpy.calls.argsFor(0)[0]).toBe(config.lib.www.url);
+ })
.then(checkProject);
- }, 60000);
+ });
it('should successfully run with NPM package and not use old cache of template on second create', function () {
var templatePkgJsonPath = path.join(global_config_path, 'node_modules', 'phonegap-template-vue-f7-tabs', 'package.json');