配置存根工厂,returns 单元测试中延迟的承诺?
Configure a stubbed factory that returns a promise from a deferred in a unit test?
我正在编写一个 AngularJs 单元测试,我需要在其中存根一个工厂,该工厂在被调用时 returns 是一个承诺。稍后我将通过使用本地范围的延迟对象在我的测试中手动解决承诺。
我正在努力
let currentUser
beforeEach(module(($q, $provide) => {
currentUser = $q.defer()
$provide.factory('gettingCurrentUser', () => currentUser.promise)
}))
但这行不通,因为 $q
似乎无法注入到 module
块中。当然,如果我将其更改为 inject
块,则 $provide
将不再可注入!
我可以用十几种不同的方式解决这个问题,但它似乎太简单了,无法成为需要破解的边缘案例。
这样做的 "correct AngularJs" 方法是什么?
一个简单的方法是 return 局部变量,该变量将被分配给另一个块中的适当承诺(但在实例化此服务之前)。
let currentUserPromise;
beforeEach(module(($provide) => {
$provide.factory('gettingCurrentUser', () => currentUserPromise)
}));
beforeEach(inject(($q) => {
currentUserPromise = $q.resolve(...);
}));
it(inject((serviceThatDependsOnGettingCurrentUser) => {
...
}));
我正在编写一个 AngularJs 单元测试,我需要在其中存根一个工厂,该工厂在被调用时 returns 是一个承诺。稍后我将通过使用本地范围的延迟对象在我的测试中手动解决承诺。
我正在努力
let currentUser
beforeEach(module(($q, $provide) => {
currentUser = $q.defer()
$provide.factory('gettingCurrentUser', () => currentUser.promise)
}))
但这行不通,因为 $q
似乎无法注入到 module
块中。当然,如果我将其更改为 inject
块,则 $provide
将不再可注入!
我可以用十几种不同的方式解决这个问题,但它似乎太简单了,无法成为需要破解的边缘案例。
这样做的 "correct AngularJs" 方法是什么?
一个简单的方法是 return 局部变量,该变量将被分配给另一个块中的适当承诺(但在实例化此服务之前)。
let currentUserPromise;
beforeEach(module(($provide) => {
$provide.factory('gettingCurrentUser', () => currentUserPromise)
}));
beforeEach(inject(($q) => {
currentUserPromise = $q.resolve(...);
}));
it(inject((serviceThatDependsOnGettingCurrentUser) => {
...
}));