我想测试以下 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/