【问题标题】:How do you trigger a promise to resolve in an Angular test?如何在 Angular 测试中触发解决的承诺?
【发布时间】:2016-03-05 05:30:38
【问题描述】:
if (isPromise(self.parentId)) {
  console.log('DEBUG: outside then');
  self.parentId.then(function (parent) {
    console.log('DEBUG: inside then');
    self.parentId = parent.id;
    self.notes = Note.query({
      parent_type: self.parentType,
      parent_id: self.parentId,
    });
  });

我想测试当self.parentIdpromiseNote.query 被调用。

it('when a promise is passed in', function () {
  $controller('NotesController', {}, {
    parentId: Lead.get({ id: 1 }).$promise,
    parentType: 'leads',
  });
  expect(Note.query.called).to.equal(true);
});

这不起作用。外部日志发生,但内部日志没有。所以大概,问题在于承诺没有解决。

1) 为什么这不起作用? 2) 我怎样才能让它工作?

【问题讨论】:

    标签: javascript angularjs unit-testing karma-runner


    【解决方案1】:

    为了测试 Promise,你需要在你的 Promise 返回函数上创建 spy。然后用一些模拟数据来解决这个承诺。 先在 test 中注入 $q。

    deferred = _$q.defer();
    spyOn(self, 'parentId').and.returnValue(deferred.promise);
    deferred.resolve({ id: 102 });
    $scope.$apply();
    

    这应该会解决您的承诺。根据您的要求更改字段名称,这只是示例

    【讨论】:

    • 包含相关信息的链接不如在您的答案中包含相关信息。外部链接可以而且经常会发生故障或更改其结构,从而使信息不再可用。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2015-09-22
    • 2014-03-05
    • 1970-01-01
    • 2020-10-21
    • 2013-04-25
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多