如何在 Angular js 中为控制器编写测试用例
How to write test cases for controllers in Angular js
最近我们开始为我们的应用程序编写测试用例,我们需要帮助编写控制器测试用例。我们正在使用 Mocha、chai 和 Snion 库来编写测试用例。
这是 plunker link,其中包含我们的控制器代码。谁能帮助我们如何为这个控制器编写测试用例?其余的我们将在此基础上执行。我们需要使用此控制器进行初始推送。
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");
})
非常感谢任何帮助。
提前致谢,如果您对此有任何疑问,请告诉我。
我喜欢 mocha chai 和 Sinon,并将它们用于测试 Node 代码。从未将它们与 Angular.
一起使用
典型的 Angular 设置是 Karma、Jasmine(单元测试)和 Protractor(E2E 测试)。
看看你的控制器代码,我会说你在控制器中有太多的逻辑。您需要将一些代码委托给服务。
关于测试 $http 你需要使用 ng-mock 的 $httpBackend。
您也应该在代码中使用 Angular Controller As 语法。
最近我们开始为我们的应用程序编写测试用例,我们需要帮助编写控制器测试用例。我们正在使用 Mocha、chai 和 Snion 库来编写测试用例。
这是 plunker link,其中包含我们的控制器代码。谁能帮助我们如何为这个控制器编写测试用例?其余的我们将在此基础上执行。我们需要使用此控制器进行初始推送。
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");
})
非常感谢任何帮助。
提前致谢,如果您对此有任何疑问,请告诉我。
我喜欢 mocha chai 和 Sinon,并将它们用于测试 Node 代码。从未将它们与 Angular.
一起使用典型的 Angular 设置是 Karma、Jasmine(单元测试)和 Protractor(E2E 测试)。
看看你的控制器代码,我会说你在控制器中有太多的逻辑。您需要将一些代码委托给服务。
关于测试 $http 你需要使用 ng-mock 的 $httpBackend。
您也应该在代码中使用 Angular Controller As 语法。