我是单位测试的新手,并尝试为我的应用编写单元测试。我的路线是:
{
name: 'details',
url: '/accounts/company/:companyId',
controller: 'controllere',
templateUrl: 'templateurl',
}
我的控制器:
if (!$stateParams.companyId) {
$scope.promise = $state.go('home');
} else {
// get company details
}
在我的单元测试中,我需要测试是否" companyId"在URL中出现,然后只有其他人继续重定向到" home"。我试过这段代码,但每次都失败了。我不知道自己做错了什么。
it('should respond to URL with params', function() {
expect($state.href('/accounts/company/', { companyId: 'test-company' })).toEqual('#/accounts/company/test-company');
});
每次我运行此测试时都会说:预期为等于'#/ accounts / company / test-company'
答案 0 :(得分:0)
$state.href
方法需要stateName
,因为在第一个参数后面跟参数需要形成URL并且你已经在其中传递状态URL
,这是错误的。
expect(
$state.href('details', {
companyId: 'test-company'
})
).toEqual('#/accounts/company/test-company')
我发现您对单元测试此功能的方法有问题,而应该以不同的方式进行测试。就像你应该从测试用例中调用底层方法一样,检查你是否得到了预期的结果。
<强>控制器强>
function redirect() {
if (!$stateParams.companyId) {
$scope.promise = $state.go('home');
} else {
// get company details
}
}
$scope.redirect = redirect;
<强> spec.js 强>
//test pseudo code
describe('should redirect correctly', function(){
it('should redirect to details page when companyId is passed', function(){
//arrange
//TODO: please make sure, you avail useful dependency before using them
var $scope = $rootScope.$new(),
mockParams = { companyId: 1 }
$controller('myCtrl', {$scope: $scope, $stateParams: mockParams });
//assert
$scope.redirect();
//act
$scope.$apply(); //apply the changes
expect($state.current.url).toEqual('#/accounts/company/test-company');
})
})