【问题标题】:Promise callback doesn't execute while running unit test运行单元测试时不执行承诺回调
【发布时间】:2015-05-20 13:42:05
【问题描述】:

我想测试以下控制器:

angular.module('myApp').controller('OrderController', ['$scope', 'retryRequest', 'ORDER_STATUS_URL', 'MAX_RETRY',
 function ($scope, retryRequest, ORDER_STATUS_URL, MAX_RETRY) {
  retryRequest(ORDER_STATUS_URL, 'GET', MAX_RETRY).then(function(data) {
    $scope.order = data;
  }).catch(function(data) {
    $scope.error = data.ErrorMessage;
  });
}]);

测试:

describe('Order Controller', function () {

  beforeEach(module('myApp'));

  var $controller, $q;
  beforeEach(inject(function (_$controller_, _$q_) {
    $controller = _$controller_;
    $q = _$q_;
  }));

  describe('When I access order data', function() {
    it('I expect Id to be set', function() {
      var mockRetryRequest = function(){
        var deferred = $q.defer();
        deferred.resolve({ 'OrderId': 'foo' });
        return deferred.promise;
      };
      var $scope = {};
      var controller = $controller('OrderController', { $scope: $scope, retryRequest: mockRetryRequest });
      assert.equal($scope.order.OrderId, 'foo');
    });
  });
});

这导致 $scope.order 未定义。模拟被注入,但承诺不调用回调(然后)。

可能的候选人是摩卡设置。

bower.json

  "name": "client",
  "private": true,
  "dependencies": {
    "chai": "~1.8.0",
    "mocha": "~1.14.0",
    "angular": "1.3.11",
    "angular-mocks": "1.3.11",
    "sinon": "~1.12.2"

【问题讨论】:

  • 也许 $scope.$apply 会修复它从未使用过的摩卡咖啡
  • @BobThomas thx 提示范围应用不存在,因为我传递的是空对象,但我注入了 $rootScope 然后我调用 $rootScope.$digest();
  • 真的错过了 digest() 应该是修复 :)

标签: javascript angularjs mocha.js


【解决方案1】:

摘要循环不运行。致电$rootScope.$digest();

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2016-05-01
    • 2018-10-16
    • 2017-12-29
    • 2017-05-08
    相关资源
    最近更新 更多