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

标签 javascript angularjs jasmine karma-jasmine

我有一个有方法的 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/

相关文章:

node.js - 在 Jasmine 2 中正确使用 karma-commonjs

javascript - 如何在不使用 Javascript 中的库和内置方法的情况下计算平方根?

javascript - 如何在没有 cgi 的情况下从 python 到 JavaScript 获取 float

javascript - 拒绝在浏览器中设置不安全 header "Cookie"错误但请求成功

javascript - AngularJS运行执行功能?

node.js - 如何判断 Jasmine 中哪些测试花费的时间最多?

angularjs - 注入(inject)名称中带有点的工厂

使用 AppendChild 的 Javascript For 循环

javascript - 如何从 ionic radio 基团中获取选定的值

javascript - AngularJS ng-repeat 如何从 jquery 每行添加数据