gpt4 book ai didi

javascript - 如何在我的子 Controller 中模拟此方法来测试它?

转载 作者:行者123 更新时间:2023-11-28 05:18:07 30 4
gpt4 key购买 nike

我有一个有方法的 Angular Controller

$scope.handleChange = function (index) {
//Logic
$scope.$parent.doSomething();
};

我似乎找不到方法来测试 handleChange() 方法或使用 jasmine 的 Controller 对象,因为这两个测试都会引发此错误:类型错误:$scope.$parent.doSomething 不是函数

我已经这样做了:

beforeEach(inject(function ($controller, $injector, $q, $rootScope) {
var qReference = $q;
var rootScopeReference = $rootScope;
var $scope = rootScopeReference.$new();

var controllerReference = $controller('MyController', {
$scope: $scope
});
}));

it('Test Case-1: Mycontroller is defined', function () {
expect(controllerReference).toBeDefined();
});

我做错了什么以及如何解决这个问题?

最佳答案

您可以将范围存储在测试类的变量中,使用 spy 模拟方法 doSomething:

var myScope = $rootScope.$new();

spyOn(myScope.$parent, 'doSomething');

然后将其传递给您的 Controller :

var controllerReference = $controller('MyController', {
$scope: myScope
});

在你的断言 block 上你做这样的事情:

expect(myScope.$parent.doSomething).toHaveBeenCalled();

希望有帮助。

关于javascript - 如何在我的子 Controller 中模拟此方法来测试它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805314/

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