0

我正在使用 Angular-UI Bootstrap 对话框并喜欢它们,但我似乎无法弄清楚如何测试它们关闭时返回的内容(或与此相关的承诺中的任何其他内容。)有人可以指出我举一个如何测试的例子?我怀疑我只是没有正确地嘲笑它。这是我的测试:

spyOn(scope.orderDetailsModal, 'open').andReturn({then:function(){return "fulfill";}});
scope.orderDetailsModal.isOpen = function(){return true;};
scope.orderDetails();
expect(scope.orderDetailsModal.open).not.toHaveBeenCalled();

scope.orderDetailsModal.isOpen = function(){return false;};
scope.orderDetails();
scope.$digest();
expect(scope.orderDetailsModal.open).toHaveBeenCalled();
expect(scope.testresult).toEqual("fulfill");

当然,对 scope.testresult 的测试失败了。不用说,我感到有点失落。

4

1 回答 1

1

你可以使用一个实际的 promise 作为返回值open

it('sets result to foobar', function() {
  // Arrange
  var deferred;
  dialogMock.dialog.andCallFake(function () { return dialogMock; });
  dialogMock.open.andCallFake(function () { deferred = $q.defer(); return deferred.promise; });

  // Act
  $scope.openDialog();
  deferred.resolve('foobar');
  $scope.$digest();

  // Assert
  expect($scope.result).toBe('foobar');
});

查看此Plunker脚本中的完整代码。

于 2013-08-23T23:42:05.757 回答