gpt4 book ai didi

angularjs - 在 Controller 中测试命名函数

转载 作者:行者123 更新时间:2023-12-02 22:11:41 25 4
gpt4 key购买 nike

新手 Jasmine/Angular 问题。

我在 Controller 中有一个命名函数,如下所示:

.controller( 'DummyCtrl', function DummyCtrl($scope){
var doSomething = function() {
return "blah";
};
})

我需要测试这个函数,并尝试通过调用以下 Jasmine 规范来测试:

describe ('myApp', function(){
var $scope, $controller;
var DummyCtrl;

beforeEach(module('myApp'));

describe('controllers', function(){
beforeEach(inject(function ($controller, $rootScope){
$scope = $rootScope.$new();
DummyCtrl = $controller('DummyCtrl', {$scope: $scope});
}));

describe( 'DummyCtrl', function(){
var blah;

beforeEach(function(){
blah = DummyCtrl.doSomething();
});

it('should do something', function(){
expect(blah).toContain("blah");
});
});
});
});

结果并没有解决问题,而是出现以下错误:TypeError: Object #<DummyCtrl> has no method 'doSomething' 。我假设这是我不理解的 super 简单的事情。

最佳答案

您为 Controller 注册提供的函数 DummyCtrl 将被 Angular 用作构造函数。如果您需要 Controller 实例公开 function doSomething 而不将其附加到 $scope,则应将其附加到 this

尝试改变

var something = function(...

this.something = function(...

并且您的测试应该有效。

您可以在此处查看此方法:http://jsfiddle.net/yianisn/8P9Mv/ 。另请看看这个问题:How to write testable controllers with private methods in AngularJs?

关于angularjs - 在 Controller 中测试命名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17179950/

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