我正在尝试使用ressources / promises在控制器上进行一些测试。我跟着文章Mocking $resource and promises in AngularJS unit tests。
但由于queryDeferred
对象未定义,我无法使用简单的案例。
PhantomJS 1.9.8 (Linux) OrdersModule API.Orders.query should query the API.Orders FAILED
TypeError: 'undefined' is not an object (evaluating 'queryDeferred.resolve')
at /mnt/data/projects/tcs_economat/frontend/static_src/test/unit/orderSpec.js:52
PhantomJS 1.9.8 (Linux): Executed 25 of 25 (1 FAILED) (0.235 secs / 0.223 secs)
"use strict";
angular.module('OrdersModule', ['services'])
.controller('OrdersControllers', ['$scope', 'API', function ($scope, API) {
$scope.orders = [];
API.Order.query().$promise.then(function (data) {
console.log(data);
});
}]
);
"use strict";
describe('OrdersModule', function () {
var $q,
$rootScope,
$scope,
mockOrdersApiService,
queryDeferred,
mockOrdersResponse = [
{status: 'DRAFT'},
{status: 'DRAFT'}
];
beforeEach(module('tcsStoreApp'));
beforeEach(inject(function (_$q_, _$rootScope_) {
$q = _$q_;
$rootScope = _$rootScope_;
}));
beforeEach(inject(function ($controller) {
$scope = $rootScope.$new();
mockOrdersApiService = {
query: function () {
queryDeferred = $q.defer();
return {$promise: queryDeferred.promise};
}
};
spyOn(mockOrdersApiService, 'query').andCallThrough();
$controller('OrdersControllers', {
'$scope': $scope,
'API.Orders': mockOrdersApiService
});
}));
describe('API.Orders.query', function () {
beforeEach(inject(function (_$httpBackend_, $rootScope, $controller) {
var $httpBackend = _$httpBackend_;
queryDeferred.resolve(mockOrdersResponse);
$rootScope.$apply();
$httpBackend.expectGET('/static/js/tcs.fr.json').respond({});
}));
it('should query the API.Orders', function () {
expect(mockOrdersApiService.query).toHaveBeenCalled();
});
});
});
mockOrdersApiService
是否正确声明?queryDeferred.resolve
未定义?