【问题标题】:How to write test cases for controllers in Angular js如何在 Angular js 中为控制器编写测试用例
【发布时间】:2015-12-23 07:15:16
【问题描述】:

最近我们开始为我们的应用程序编写测试用例,我们需要帮助为控制器编写测试用例。我们正在使用 Mocha、chai 和 Snion 库来编写测试用例。

这是 plunker 链接,其中包含我们的控制器代码。谁能帮助我们如何为这个控制器编写测试用例?我们将在此基础上实现其余部分。我们需要使用这个控制器进行初始推送。

http://plnkr.co/edit/oginuqO0afxnWbVMos0f?p=info

代码如下:

angular.module( 'ngBoilerplate.account', [
    'ui.router','ngAnimate', 'ui.bootstrap','ngBoilerplate.contact','ngResource','jcs-autoValidate','ngCookies','ngTagsInput'
])
.controller('addAccount', function($scope,industryService,$http,$state,LoggedUser){
    $scope.industry = [];
    industryService.query().$promise.then(function(data) {
        $scope.industry = data;
    });

    window.onbeforeunload = function (event) {

        if ($scope.addAccountForm.$dirty) {

            var message = 'If you leave this page you are going to lose all the unsaved changes.';

            if (typeof event == 'undefined') {
                event = window.event;
            }
            if (event) {  
                event.returnValue = message;
            }

            return message;
        }
    };

    $scope.insertAccount = function(){
        $scope.address = {
            'line1':$scope.line1,
            'line2':$scope.line2,
            'city':$scope.city,
            'zipCode':$scope.zipCode,
            'state':$scope.state,
            'country':$scope.country
        };

        console.log($scope.industryId);

        if($scope.industryId!== undefined) {

            $scope.industry = {
                'id' : $scope.industryId
            };
        }

        $http.post('/rest/users/'+LoggedUser.getUserName()+'/accounts',{
            'name' : $scope.name,
            'industryBean': $scope.industry,
            'email' :$scope.email,
            'phone' : $scope.phone,
            'fax' : $scope.fax,
            'website' : $scope.website,
            'headquarters' : $scope.headquarters,
            'dbaName' : $scope.dbaName,
            'numberOfEmployees' : $scope.numberOfEmployees,
            'annualRevenue':$scope.annualRevenue,
            'logo' : $scope.logo,
            'primaryContact': $scope.contact,
            'addressBean':$scope.address
        }).success(function(data){
            $scope.account=data;
            $state.go('main.account', {}, {reload: true});
        });
    };
})
.factory("loggedInUser", function($resource) {
    return $resource("/rest/users/:username");
})
 .factory("industryService", function($resource) {
    return $resource("/rest/accounts/industry");
})

非常感谢任何帮助。

提前致谢,如果您对此有任何疑问,请告诉我。

【问题讨论】:

    标签: javascript angularjs mocha.js karma-jasmine sinon-chai


    【解决方案1】:

    我喜欢 mocha chai 和 Sinon,并使用它们来测试 Node 代码。从未将它们与 Angular 一起使用。

    典型的 Angular 设置是 Karma、Jasmine(单元测试)和量角器(E2E 测试)。

    查看您的控制器代码,我会说您的控制器中有太多逻辑。您需要将一些代码委托给服务。

    关于测试 $http 你需要使用 ng-mock 的 $httpBackend。

    您也应该在代码中使用 Angular Controller As 语法。

    【讨论】:

    • 谢谢你的回答兄弟...这绝对有帮助...我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多