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,
});
});
我想测试Note.query
是self.parentId
时调用promise
。
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)我怎样才能让它发挥作用?
答案 0 :(得分:0)
为了测试承诺,你需要在你的承诺返回功能上创建间谍。然后用一些模拟数据解决这个问题。 首先在测试中注入$ q。
deferred = _$q.defer();
spyOn(self, 'parentId').and.returnValue(deferred.promise);
deferred.resolve({ id: 102 });
$scope.$apply();
这应该可以解决你的承诺。根据您的要求更改字段名称只是样本