【发布时间】:2016-07-26 21:42:51
【问题描述】:
我很难理解我应该如何为 Angular.js 控制器编写方法以允许完成单元测试。互联网上的所有教程都很简单,并没有显示它在现实生活中的应用程序是什么样子。这些教程显示所有方法都是通过将它们附加到“范围”或“this(aka vm)”来公开的。在我的理解中,不会在控制器之外使用的方法不需要暴露。在下面的示例中,我只公开了两种方法,因为它们是通过单击页面上的按钮来触发的。其余方法仅用于内部目的。 如何在不暴露控制器的情况下测试控制器中的私有方法?我是否需要公开所有这些才能进行单元测试?公开所有方法是一种好习惯吗?谢谢
angular.module('app.pool',[])
.controller('PoolController', PoolController);
function PoolController(PoolService) {
var vm = this;
vm.candidateName='';
vm.candidatePicUrl='';
vm.approveCandidate = approveCandidate;
vm.refuseCandidate = refuseCandidate;
function approveCandidate() {
PoolService.approveCandidate();
getNextCandidate();
}
function refuseCandidate() {
PoolService.refuseCandidate();
getNextCandidate();
}
function getNextCandidate() {
clearProfile();
PoolService.getNextCandidate().
success(displayUserData);
}
function displayUserData(data) {
vm.candidateName = getCandidateName(data);
vm.candidatePicUrl = getCandidateProfilePic(data);
}
function getCandidateName(data) {
return data.userName;
}
function getCandidateProfilePic(data) {
return changeUrlToBiggerPic(data.profilePicture);
}
function changeUrlToBiggerPic(url) {
return url.replace('s150x150', 's600x600');
}
function clearProfile() {
vm.candidateName = "";
vm.candidatePicUrl = "";
}
}
【问题讨论】:
标签: angularjs unit-testing angular-controller