我正在使用 Jasmine/Karma 来测试 Angularjs 代码,而且我对 Jasmine 是全新的。我使用 expect(true).toEqual(true)
进行了基本测试,该测试有效,因此看起来设置没问题。一旦我尝试测试实际使用 Controller 的东西,我就会得到以下结果:
类型错误:未定义不是函数(评估 '$scope.$on('myEvent', function(event,data)
我有几个 $scope.$on 方法,无论它们的顺序如何,它都会提示第一个方法。以下是 Controller 设置方式的摘录:
angular.module('myProject.dataType')
.controller('DataTypeController', ['$scope', '$state', '$rootScope', function($scope, $state, $rootScope) {
$scope.dataTypeId="";
...other stuff...
$scope.$on('myEvent', function(event, data) {
$scope.dataTypeId = "";
});
}]);
这是我的规范文件:
describe("Data Type Controller', function() {
beforeEach(module('myProject.dataType') );
var $controller;
beforeEach(inject(function(_$controller_) {
$controller = _$controller_;
}));
describe('Create type', function() {
it('basic test', function() {
var $scope = {};
var controller = $controller('DataTypeController', {'$scope': $scope});
expect(true).toEqual(true);
});
});
});
请注意,实际代码(不是 Jasmine)工作得很好。如果我注释掉“varcontroller
...”行,测试就会通过。此时我实际上并没有尝试调用任何东西,所以我不确定为什么它会命中 $scope.$on
,更不用说失败了。我最好的猜测是我在规范文件中设置范围的方式有问题。
我已经检查了文件版本(基于对类似问题的回答),并尽力确保不存在拼写错误或粗手指。非常感谢任何帮助。
最佳答案
我相信您还需要将范围注入(inject)到 beforeEach fn 中,而不是将其定义为空对象。现在,您的 $scope 实际上是一个空对象,因此测试上下文中不存在方法“$on”。
用途:
beforeEach(inject(function(_$controller_, _$rootScope_) {
$controller = _$controller_;
$scope = _$rootScope_.$new();
}));
关于javascript - Jasmine 在 $scope.$on 上给出 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504861/