我正在编写一个AngularJs单元测试,需要在其中测试被调用时返回promise的工厂。稍后,我将在测试中使用本地范围的延迟对象手动解决Promise。
我正在尝试做
let currentUser
beforeEach(module(($q, $provide) => {
currentUser = $q.defer()
$provide.factory('gettingCurrentUser', () => currentUser.promise)
}))
但这是行不通的,因为似乎无法将
$q
注入(inject)module
块中。当然,如果我将其更改为inject
块,则$provide
不再可注入(inject)!我可以用很多不同的方法来解决这个问题,但是这似乎太简单了,不可能成为需要黑客攻击的边缘案例。
这样做的“正确AngularJs”方法是什么?
最佳答案
一个简单的方法就是返回局部变量,该局部变量将在另一个块中(但是在实例化此服务之前)分配给适当的promise。
let currentUserPromise;
beforeEach(module(($provide) => {
$provide.factory('gettingCurrentUser', () => currentUserPromise)
}));
beforeEach(inject(($q) => {
currentUserPromise = $q.resolve(...);
}));
it(inject((serviceThatDependsOnGettingCurrentUser) => {
...
}));