配置存根工厂,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) => {
    ...
  }));