gpt4 book ai didi

angularjs - 使用inject时如何在beforeEach中放置异步回调?

转载 作者:行者123 更新时间:2023-12-02 22:32:06 26 4
gpt4 key购买 nike

在我的单元测试中,我想注入(inject)某些模块,并且希望 beforeEach Hook 是异步的。基本上,我正在寻找这样的东西:

beforeEach(inject(function(_$rootScope_, _$compile_, done) {
...
}));

但是,这不起作用,因为 Karma 提示没有名为 doneProvider 的提供程序。基本上,它试图在注入(inject)中查找任何内容的提供者。

Done 通常会插入到 beforeEach Hook 中,如下所示:

beforeEach(function(done) {
...
});

但是我怎样才能注入(inject)我需要的东西并且仍然让 beforeEach 异步呢?

我还尝试在 beforeEach 中放置一个注入(inject)器函数:

beforeEach(function(done) {
inject(function(_$rootScope_, _$compile_) {
...
done();
});
});

但是当我这样做时测试超时。由于某种原因,似乎无法在注入(inject)回调中调用 done 。当我在注入(inject)函数之外调用 done 时,我注入(inject)的内容永远不会被设置。

有什么想法吗?

最佳答案

解决方案非常简单;

  beforeEach(inject(function(_$injector_) {
$injector = _$injector_;
}));

beforeEach(function (done) {
setTimeout(function () {
console.log('Got injector: '+$injector);
done();
}, 100);
});

SetTimeout 是异步任务的示例。你可以把你的放在那里。因此,只要在注入(inject)时不要在内部执行任何异步作业就可以了。

然后你使用 $injector.get('$modal') 或任何你需要的。

关于angularjs - 使用inject时如何在beforeEach中放置异步回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com