【问题标题】:Testing inside the Angular-UI Bootstrap dialog promise在 Angular-UI Bootstrap 对话框承诺中进行测试
【发布时间】:2013-08-24 07:42:05
【问题描述】:

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

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 的测试失败了。不用说,我有点失落。

【问题讨论】:

    标签: angularjs jasmine angular-ui angular-ui-bootstrap


    【解决方案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 脚本中的完整代码。

    【讨论】:

    • 好的,很酷。我不知道为什么我没有想到使用实际的承诺。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2016-05-25
    • 2016-05-01
    • 1970-01-01
    • 2016-10-25
    • 2018-06-02
    • 2014-06-04
    相关资源
    最近更新 更多