gpt4 book ai didi

javascript - Jasmine 在 $scope.$on 上给出 TypeError

转载 作者:行者123 更新时间:2023-12-01 03:47:11 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com