Tôi đang cố gắng kiểm tra một bộ điều khiển sử dụng tài nguyên $ của góc.
function PermissionsCtrl($scope, $resource, $cookies) {
var Object = $resource('/v1/objects/:id');
loadObjects();
function loadObjects() {
$scope.myAppObjects = new Array();
var data = AppObject.get({find: '{"app_id": '+wtm.app_id+'}'},
function(){
if (data.results) {
for(var i = 0; i< data.results.length; i++) {
if(!data.results[i].is_deleted) {
(function(i){
$scope.objects(data.results[i]);
}(i));
}
}
}
},
function(error){console.log(error);});
}
Và đây là mã thử nghiệm.
var apiServer = "...";
var app_id = 999
var mock_object_data = {...};
describe('apps permissionsCtrl', function(){
var scope, ctrl, $httpBackend;
// Create a matcher for comparing data
beforeEach(function() {
this.addMatchers({
toEqualData: function(expected) {
return angular.equals(this.actual, expected);
}
});
});
// Create the controller with injected data/services
beforeEach(inject(function(_$httpBackend_, $rootScope, $controller, $resource) {
$httpBackend = _$httpBackend_;
// cookie data to inject
var cookies = new Array();
cookies['id'] = '...'; // just needs to be declared
$httpBackend.expectGET(apiServer+'/v1/app_objects? find=%7B%22app_id%22:'+app_id+'+%7D&access_token=' + cookies['id'])
.respond(mock_object_data);
var $injector = angular.injector(['ng', 'ngResource']);
var $resource = $injector.get('$resource');
scope = $rootScope.$new();
ctrl = $controller(PermissionsCtrl, {$scope: scope, $cookies: cookies, $resource: $resource});
}));
it('should put object data into $scope', function() {
$httpBackend.flush();
expect(scope.objects).toEqualData(mock_object_data);
}); });
Khi tôi chạy này tôi nhận được
Error: Unknown provider: $resourceProvider <- $resource
tại dòng nơi tôi cố gắng tạo ra bộ điều khiển của tôi. Tôi không hiểu làm thế nào để tiêm này vào bộ điều khiển của tôi và không có vấn đề gì tôi cố gắng tôi nhận được cùng một lỗi. Một vài điều tôi đã thử là
- Khai báo đối tượng giả trống và chuyển nó qua biến cookie tương tự. Tôi con số này có lẽ là một giải pháp xấu anyway kể từ khi tôi thực sự muốn sử dụng dịch vụ.
- Bắt chước phạm vi giả lập và chuyển nó vào hàm tiêm của tôi và chuyển $ resource ($ new() vào bộ điều khiển của tôi.
- Không làm gì và hy vọng rằng httpBackend sẽ bao gồm nó vì đó là những gì cuối cùng được gọi là anyway. Vojta Jína làm cho âm thanh như thế sẽ hoạt động nhưng không có xúc xắc.
- Biểu tượng nhẹ. Thỏa mãn nhưng không hiệu quả lắm.
Bạn có thể chia sẻ mẫu mã hoàn chỉnh hơn không? Là một người mới đến với Angular và Jasmine, tôi gặp rắc rối khi quấn đầu mình quanh chuyện này. –
@akronym Vì vậy, bạn đã bao gồm 'app.js' để kiểm tra bộ điều khiển? – Deeptechtons
Nhưng bạn sẽ không gặp phải vấn đề tương tự khi thử nghiệm dịch vụ của mình? –