在我的单元测试中,我想注入某些模块,我希望beforeEach
钩子是异步的。基本上,我正在寻找这样的东西:
beforeEach(inject(function(_$rootScope_, _$compile_, done) {
...
}));
然而,这不起作用,因为Karma抱怨没有名为doneProvider
的提供者。基本上,它正试图在注入内部寻找任何提供者。
完成通常会插入beforeEach
挂钩中,如下所示:
beforeEach(function(done) {
...
});
但是我怎样才能注入我需要的东西并且beforeEach
仍然是异步的?
我还尝试在beforeEach
:
beforeEach(function(done) {
inject(function(_$rootScope_, _$compile_) {
...
done();
});
});
但是当我这样做时,测试会超时。出于某种原因,似乎无法在注入回调中调用done
。当我在注入函数之外调用done
时,我注入的东西永远不会被设置。
有什么想法吗?
答案 0 :(得分:4)
解决方案非常简单;
beforeEach(inject(function(_$injector_) {
$injector = _$injector_;
}));
beforeEach(function (done) {
setTimeout(function () {
console.log('Got injector: '+$injector);
done();
}, 100);
});
SetTimeout是异步任务的示例。你可以把它放在你的。所以只是不要在注入内部执行任何异步作业,它会没问题。
然后你使用$injector.get('$modal')
或任何你需要的东西。