javascript TypeError: 'undefined' 不是一个函数(评估 'mockBackend.expectPost(
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19588153/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
TypeError: 'undefined' is not a function (evaluating 'mockBackend.expectPost(
提问by balteo
I am trying to unit test an angularjs controller with Karma, and jasmine.
我正在尝试使用 Karma 和 jasmine 对 angularjs 控制器进行单元测试。
Here is my test suite:
这是我的测试套件:
describe('Controllers', function(){
var $scope, ctrl;
beforeEach(module('curriculumModule'));
describe('CreateCurriculumCtrl', function(){
var mockBackend, location;
beforeEach(inject(function($rootScope, $controller, _$httpBackend_, $location){
mockBackend = _$httpBackend_;
location = $location;
$scope = $rootScope.$new();
ctrl = $controller('CreateCurriculumCtrl', {
$scope: $scope
});
}));
it('should save the curriculum', function(){
mockBackend.expectPost('bignibou/curriculum/new');
$scope.saveCurriculum();
mockBackend.flush();
expect(location.path()).toEqual("/");
});
});
});
Here is the output of karma start:
这是 karma start 的输出:
PhantomJS 1.9.2 (Linux) Controllers CreateCurriculumCtrl should save the curriculum FAILED
TypeError: 'undefined' is not a function (evaluating 'mockBackend.expectPost('bignibou/curriculum/new')')
at /home/julien/Documents/projects/site-garde-enfants/bignibou/karma/test/spec/curriculum.test.js:16
PhantomJS 1.9.2 (Linux): Executed 2 of 2 (1 FAILED) (0.203 secs / 0.023 secs)
I don't understand why I get this error as I have correctly included the angular-mock.js file in my karma conf:
我不明白为什么会出现此错误,因为我已在 karma conf 中正确包含了 angular-mock.js 文件:
// list of files / patterns to load in the browser
files: [
'../src/main/webapp/js/libs/jquery-1.10.2.js',
'../src/main/webapp/js/libs/angular.js',
'../src/main/webapp/js/libs/bootstrap.js',
'../src/main/webapp/js/plugins/angularui.select2.js',
'test/vendor/angular-mocks.js',
'../src/main/webapp/js/custom/curriculum.js',
'test/spec/curriculum.test.js'
],
Can anyone please help?
有人可以帮忙吗?
edit: here is my controller:
编辑:这是我的控制器:
function CreateCurriculumCtrl($scope, $http, $location, select2Options){
$scope.formData={};
$scope.select2Options = select2Options;
$scope.saveCurriculum = function(){
$http.post('bignibou/curriculum/new', $scope.formData).success(function(data) {
if(data.status=="OK"){}
if(data.status=="KO"){}
$location.path("/");
});
};
}
采纳答案by balteo
Changing line 16
更改第 16 行
from
从
mockBackend.expectPost('bignibou/curriculum/new');
to
到
mockBackend.expect('POST','bignibou/curriculum/new').respond({});
somehow fixed the issue...
以某种方式解决了这个问题......
edit: expectPOST
would have worked too... Just a typo: notice the case I used...
编辑:expectPOST
也会有效...只是一个错字:注意我使用的案例...
回答by Halcyon
Likely your situation will be similar to:
您的情况可能类似于:
var a = {};
a.b();
a.b
is undefined, trying to call it will give you that error.
a.b
未定义,尝试调用它会给你那个错误。
Line 16 here is $scope.saveCurriculum()
, is $scope.saveCurriculum
undefined?
这里的第 16 行$scope.saveCurriculum()
是$scope.saveCurriculum
未定义的?