fix(testing): remove test zone for now and rely on returned promises
Adds tests for public Dart and TS frameworks to make sure that components with templateUrl can be created by the TestComponentBuilder. Closes #6359 Closes #6601
This commit is contained in:
@ -126,77 +126,23 @@ function _isPromiseLike(input): boolean {
|
||||
return input && !!(input.then);
|
||||
}
|
||||
|
||||
function runInTestZone(fnToExecute, finishCallback, failCallback): any {
|
||||
var pendingMicrotasks = 0;
|
||||
var pendingTimeouts = [];
|
||||
|
||||
var ngTestZone = (<Zone>global.zone)
|
||||
.fork({
|
||||
onError: function(e) { failCallback(e); },
|
||||
'$run': function(parentRun) {
|
||||
return function() {
|
||||
try {
|
||||
return parentRun.apply(this, arguments);
|
||||
} finally {
|
||||
if (pendingMicrotasks == 0 && pendingTimeouts.length == 0) {
|
||||
finishCallback();
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
'$scheduleMicrotask': function(parentScheduleMicrotask) {
|
||||
return function(fn) {
|
||||
pendingMicrotasks++;
|
||||
var microtask = function() {
|
||||
try {
|
||||
fn();
|
||||
} finally {
|
||||
pendingMicrotasks--;
|
||||
}
|
||||
};
|
||||
parentScheduleMicrotask.call(this, microtask);
|
||||
};
|
||||
},
|
||||
'$setTimeout': function(parentSetTimeout) {
|
||||
return function(fn: Function, delay: number, ...args) {
|
||||
var id;
|
||||
var cb = function() {
|
||||
fn();
|
||||
ListWrapper.remove(pendingTimeouts, id);
|
||||
};
|
||||
id = parentSetTimeout(cb, delay, args);
|
||||
pendingTimeouts.push(id);
|
||||
return id;
|
||||
};
|
||||
},
|
||||
'$clearTimeout': function(parentClearTimeout) {
|
||||
return function(id: number) {
|
||||
parentClearTimeout(id);
|
||||
ListWrapper.remove(pendingTimeouts, id);
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
return ngTestZone.run(fnToExecute);
|
||||
}
|
||||
|
||||
function _it(jsmFn: Function, name: string, testFn: FunctionWithParamTokens | AnyTestFn,
|
||||
testTimeOut: number): void {
|
||||
var timeOut = testTimeOut;
|
||||
|
||||
if (testFn instanceof FunctionWithParamTokens) {
|
||||
jsmFn(name, (done) => {
|
||||
var finishCallback = () => {
|
||||
// Wait one more event loop to make sure we catch unreturned promises and
|
||||
// promise rejections.
|
||||
setTimeout(done, 0);
|
||||
};
|
||||
var returnedTestValue =
|
||||
runInTestZone(() => testInjector.execute(testFn), finishCallback, done.fail);
|
||||
var returnedTestValue;
|
||||
try {
|
||||
returnedTestValue = testInjector.execute(testFn);
|
||||
} catch (err) {
|
||||
done.fail(err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (testFn.isAsync) {
|
||||
if (_isPromiseLike(returnedTestValue)) {
|
||||
(<Promise<any>>returnedTestValue).then(null, (err) => { done.fail(err); });
|
||||
(<Promise<any>>returnedTestValue).then(() => { done(); }, (err) => { done.fail(err); });
|
||||
} else {
|
||||
done.fail('Error: injectAsync was expected to return a promise, but the ' +
|
||||
' returned value was: ' + returnedTestValue);
|
||||
@ -206,6 +152,7 @@ function _it(jsmFn: Function, name: string, testFn: FunctionWithParamTokens | An
|
||||
done.fail('Error: inject returned a value. Did you mean to use injectAsync? Returned ' +
|
||||
'value was: ' + returnedTestValue);
|
||||
}
|
||||
done();
|
||||
}
|
||||
}, timeOut);
|
||||
} else {
|
||||
@ -232,17 +179,17 @@ export function beforeEach(fn: FunctionWithParamTokens | AnyTestFn): void {
|
||||
// The test case uses inject(). ie `beforeEach(inject([ClassA], (a) => { ...
|
||||
// }));`
|
||||
jsmBeforeEach((done) => {
|
||||
var finishCallback = () => {
|
||||
// Wait one more event loop to make sure we catch unreturned promises and
|
||||
// promise rejections.
|
||||
setTimeout(done, 0);
|
||||
};
|
||||
|
||||
var returnedTestValue =
|
||||
runInTestZone(() => testInjector.execute(fn), finishCallback, done.fail);
|
||||
var returnedTestValue;
|
||||
try {
|
||||
returnedTestValue = testInjector.execute(fn);
|
||||
} catch (err) {
|
||||
done.fail(err);
|
||||
return;
|
||||
}
|
||||
if (fn.isAsync) {
|
||||
if (_isPromiseLike(returnedTestValue)) {
|
||||
(<Promise<any>>returnedTestValue).then(null, (err) => { done.fail(err); });
|
||||
(<Promise<any>>returnedTestValue).then(() => { done(); }, (err) => { done.fail(err); });
|
||||
} else {
|
||||
done.fail('Error: injectAsync was expected to return a promise, but the ' +
|
||||
' returned value was: ' + returnedTestValue);
|
||||
@ -252,6 +199,7 @@ export function beforeEach(fn: FunctionWithParamTokens | AnyTestFn): void {
|
||||
done.fail('Error: inject returned a value. Did you mean to use injectAsync? Returned ' +
|
||||
'value was: ' + returnedTestValue);
|
||||
}
|
||||
done();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user