Jasmine:如何测试控制器函数调用另一个javascript函数

时间:2014-11-20 05:48:44

标签: angularjs jasmine

以下是示例代码:

App.controller('Crtl', ["$scope", function ($scope) {

$scope.FetchDetail = function () {
    var accNum = this.customer.accNo;
    GetAccountDetails(accNum);
}; }]);

我是Jasmine的新手,现在我正在为我的角度代码编写单元测试。在这里,我创建了FetchDetail函数,然后调用javascript函数GetAccountDetails(accNum)。

如何使用Jasmine测试此样本。

1 个答案:

答案 0 :(得分:1)

这取决于你是否需要存根(即捕获并改变其行为)或者它是否足以监视它(观察它)。无论哪种方式,你最好注射它,所以你可以控制它。

我一直很愉快地使用sinon http://sinonjs.org

如果你想间谍,即在不改变它的情况下观察它的行为,那么在调用它之前,你会这样做

var spy = sinon.spy(GetAccountDetails);

然后你可以检查它是否被调用,或者是什么参数等等。

spy.calledOnce === true; // if it was called once
spy.called === true; // if it was called at all
spy.firstCall.args[0]; // first argument to first call
// etc. - check out the docs

如果您需要存根,请使用存根功能,然后您可以在其中定义应该的行为。您可以获得所有间谍功能,但也可以控制响应的内容。但是,与现有对象的方法相反,它很难窥探全局。