我正在使用带有业力/茉莉花的angularjs进行测试。
如何使用 3 个条件 if 响应对成功回调进行单元测试?我在我的angularjs项目中有这个功能:
function loginCtrl($scope, $http, $log, $window) {
$scope.error = '';
$scope.submit = function () {
$http({
method: 'POST',
url: '/login',
headers: {'Content-Type': 'application/json'},
data: {'username': $scope.username, 'password': $scope.userpassword},
}).then(function successCallback(response, data) {
if (response.data.successful) {
//Success
console.info('INFO: checkboxes.js::/login successful');
$window.location.href = '/';
} else if (response.data.error) {
//Error invalid credientials
$scope.error = 'ERROR: ' + response.data.error;
console.error('ERROR: checkboxes.js::/login error:', response.data.error);
} else {
//Error no creds sent. Empty body
$scope.error = 'Invalid login: username and password combination'
console.error('ERROR: checkboxes.js::/login invalid credentials')
}
}, function errorCallback(response) {
$scope.error = 'An error occured, please try again later.'
console.error('ERROR: checkboxes.js::/login', response.error)
});
};
}
我尝试了下面的测试代码来尝试点击第一个 if 块,但没有成功。
it('expects POST on /login success and reroutes to home page', function () {
var response = {data:{successful:true}}
var url = '/login',
data = {
'username': 'test.person',
'password': 'test'
},
header = {'Content-Type': 'application/json'},
successCallback = jasmine.createSpy('success'),
errorCallback = jasmine.createSpy('error');
$httpBackend.expectPOST(url, data, header
).respond(200, response.data.successful)
scope.submit();
expect(successCallback).not.toHaveBeenCalled();
$httpBackend.flush;
expect(fakeWindow.location.href).toBe('/');
});
我能够弄清楚这一点。我最终创建了一个工厂,该工厂执行 http post 调用并将响应发送回该控制器。
然后对于单元测试,我能够为每个条件响应创建一个测试。 我只是嘲笑了该服务,并让它将不同的响应发回。