在我的测试中,我有两个测试。一个是异步,另一个是console.error。我将Jasmine作为^ 2.5.3,并在chrome 44.0.2403上进行测试。
第一次测试看起来像这样
describe('Async test', function() {
const config = {'foo':'bar'};
let $rootScope = false;
beforeEach( module('my.lovely.async') );
function createService( config ) {
let createdService = false;
module( $provide => $provide.constant("config", config);
inject( ( $injector, _$rootScope_ ) => {
createdService = $injector.get("MyAsyncService");
$rootScope = _$rootScope_;
})
return createdService;
}
it("should do async stuff", done => {
createService(config).doAsync().then( data => {
expect(data.awesome).toContain("foo"); // <=== ref point 1
});
$rootScope.$digest();
done()
});
});
这对它自己来说运行得很好。
接下来的测试是:
describe('console.error test', function() {
let DebugService = false;
beforeEach( function(){
module('my.app');
module('my.debug.module');
inject( ( $injector, _$rootScope_ ) => {
DebugService = $injector.get("DebugService");
$rootScope = _$rootScope_;
})
});
it("should log errors", function() {
spyOn(console, "error").and.callThrough();
console.error("Banana"); // <=== ref point 2
expect(DebugService.getErrors()).toContain("Banana")
});
});
在我的app.module('my.app').config(....).run(...)
代码中,运行块会覆盖console.error
调用,以便它也会转到DebugService.error
。一个片段在这里:
App.run(['DebugService', function(DebugService){
var consoleError = console.error;
console.error = function (message) {
consoleError.call(console, message);
DebugService.error(message);
};
})
我所看到的是,当业力在第一次测试中到达ref point 1
时,按下&#39;按钮在第二个ref point 2
处结束,然后在ngMocks中进入module.$$afterEach
功能。跳到module.$$cleanUp
看起来我已经在第二次测试了。
我无法判断第一个测试是否没有正确执行它的异步,或者第二个测试的console.error是否未通过测试。
如何让两个测试都运行?