加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Jasmine Test:如何在AngularJS中模拟控制器内的方法

发布时间:2020-12-17 17:57:54 所属栏目:安全 来源:网络整理
导读:我正在使用 angularjs,我的控制器看起来像这样: (function (app) {var myController = function ($scope,myService) { var onData = function (response) { if (!response.data || response.data.length === 0) { app.showErrorMessage('Error'); } else {
我正在使用 angularjs,我的控制器看起来像这样:

(function (app) {

var myController = function ($scope,myService) {

    var onData = function (response) {

        if (!response.data || response.data.length === 0) {

            app.showErrorMessage('Error');

        } else {
            $scope.myData = response.data;

            drawChart();
        }

        $scope.loading = false;
    };

    var init = function () {
        $scope.loading = true;
        myService.getContBreakdown().then(onData,onError);
    };


    var drawChart = function () {
    // Some Code

    };

    init();
};

  app.controller('myController',['$scope','myService',myController]);
}(angular.module('app')));

我正在编写一个jasmine测试套件来测试从myService接收的数据,并模拟对drawChart()方法的调用.我应该如何编写一个简单的茉莉花测试套件来模拟对drawChart()方法的调用?

解决方法

您的方法应该在$scope中.
它应该看起来像这样:

在您的控制器中:

...
$scope.methodToTest = function () {
    ...
    $scope.methodToMock();
    ...
}
$scope.methodToMock = function () {
    // do something
}
...

在你的测试中:

...
describe( 'methodToTest',function ()
{
    it( 'should call the methodToMock',function() {
        spyOn( $scope,'methodToMock' );
        $scope.methodToTest();
        expect( $scope.methodToMock ).toHaveBeenCalled();
    } );
} );
...

也许这也可以帮到你:
http://www.benlesh.com/2013/05/angularjs-unit-testing-controllers.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读