【发布时间】: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