Я пытаюсь научиться тестировать блок в угловом режиме. Модуль тестирует мои контроллеры, чтобы начать с моих услуг.AnglearJS Unit Test - Undefined не является функцией
Я начал с базового теста.
контроллер код:
angular.module('app')
.controller('TestCtrl', function ($rootScope,$scope,fileLoader,ngProgress) {
$scope.test= [];
$scope.init = function(){
fileLoader.getFile("test")
.then(function(res){
//Success
console.log(res);
$scope.test= res;
}, function(err){
//Error
});
ngProgress.complete();
}
$scope.init();
$scope.title = "Test";
});
Код испытания:
describe('Controller: TestCtrl', function() {
// load the controller's module
beforeEach(module('app'));
var TestCtrl,
scope,test;
test = {};
test.getFile = function(name) {
return [
{
"id": 0,
"name": "Test",
"imgName": "Test.png"
},
{
"id": 1,
"name": "Test1",
"imgName": "Test1.png"
}];
};
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
TestCtrl= $controller('TestCtrl', {
$scope: scope,
fileLoader : test
});
}));
it('should have the correct title', function() {
expect(scope.title).toBe("Test");
});
});
И я не могу понять, почему я получаю следующее сообщение об ошибке:
TypeError: 'undefined' is not a function (evaluating 'fileLoader.getFile("test") .then') undefined
Есть ли способ, как только это разрешено. Я могу отложить все мои издевательства в отдельном файле, например мой fileLoader макет и просто вводить его таким образом?
Я не понимаю, как я его впрыскиваю, но пока не определено.
Благодаря
Как я мог бы выполнить обещание на стороне тестирования устройства? – LmC
Несомненно, это все равно показало, что я возвращаю что-то просто не так? – LmC
вы вызываете «then» после getFile() ... «then» не определено, потому что getFile() возвратил массив ... undefined не является функцией. для «defer» взгляните на угловые $ q [здесь ] (https://docs.angularjs.org/api/ng/service/$q#testing) – capgeti