javascript - 运行单元测试时 Promise 回调不执行

标签 javascript angularjs mocha.js

我想测试以下 Controller :

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 未定义。模拟已注入(inject),但 promise 不会调用回调(然后)。

可能的候选者是 Mocha 设置。

凉亭.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"

最佳答案

摘要循环不运行。调用$rootScope.$digest();

关于javascript - 运行单元测试时 Promise 回调不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30351477/

相关文章:

javascript - Google Apps 脚本 - 将应用程序脚本函数的输出返回到 html 文件 javascript 函数

java - 使用用 Java 编写的现有 Selenium 测试的 AngularJs 端到端测试

javascript - Angularjs无法读取未定义的属性 'id'

unit-testing - Mocha : Ensure the done() callback is being called in this test

node.js - 让 Mocha 等待 index.js 完成加载后再运行测试文件

javascript - 为什么传单 map 图 block 顺序错误

javascript - AngularJS中范围原型(prototype)/原型(prototype)继承的细微差别是什么?

javascript - 使用隔离范围指令时保存模型值不起作用

javascript - 如何将数据作为参数或使用 Angular Service 从一种状态传递到另一种状态?

mocha.js - 使用 mocha 使用本地 dynamodb 编写测试