我试图弄清楚如何测试依赖于的AngularJS服务$http
。
当使用$httpBackend
嘲笑说AJAX后(whenPOST
),并发布你的对象确定响应?
这是我的服务和测试,例如:
(function () {
"use strict"
var app = angular.module('cs');
app.service('PlateCheckService', ['$http', function ($http) {
return {
checkPlate: function (plateNumber) {
return $http.post('PlateCheck/Index', {
plateNumber: plateNumber
}).then(function (response) {
return {
message: response.data.VehicleAtl === null ? 'Clean' : 'Hot',
alertClass: response.data.VehicleAtl === null ? 'alert-success' : 'alert-danger'
}
});
}
}
}]);
}());
测验
/// <reference path="../libs/angular-1.0.8/angular.js" />
/// <reference path="../libs/angular-1.0.8/angular-mocks.js" />
/// <reference path="../libs/jasmine-1.3.0/jasmine.js" />
/// <reference path="../app.js" />
/// <reference path="../services/plate-check-service.js" />
describe('Plate Check Service', function () {
var httpBackend,
service;
beforeEach(function () {
module('cs');
inject(function ($httpBackend, PlateCheckService) {
httpBackend = $httpBackend;
httpBackend.whenPOST('PlateCheck/Index', { plateNumber: '123456' }).respond({
response: {
message: 'Clean',
alertClass: 'alert-success'
}
});
httpBackend.whenPOST('PlateCheck/Index', { plateNumber: '123456789' }).respond({
response: {
message: 'Hot',
alertClass: 'alert-danger'
}
});
service = PlateCheckService;
});
});
it('Should return a clean plate.', function () {
var result;
service.checkPlate('123456').then(function (response) {
result = response;
});
httpBackend.flush();
expect(result.message).toBe('Clean');
expect(result.alertClass).toBe('alert-success');
});
});
测试结果
Test 'Plate Check Service:Should return a clean plate.' failed
Expected 'Hot' to be 'Clean'.
Expected 'alert-danger' to be 'alert-success'.
in D:\Code\Scripts\angular\specs\plate-check-service-specs.js (line 35)
0 passed, 1 failed, 1 total (chutzpah).
========== Total Tests: 0 passed, 1 failed, 1 total ==========
好像没有考虑到plateNumber
我传递给将其发布到服务器的服务。
我本来希望这个测试能够通过。
这有任何意义吗?
您使用when
而不是expect
。$httpBackend
可以在两种不同的模式下运行。从文档:
有两种方法指定当被测代码发出http请求时,模拟后端应将哪些测试数据作为http响应返回:
- $ httpBackend.expect-指定请求期望
- $ httpBackend.when-指定后端定义
请求期望与后端定义请求期望提供了一种对应用程序提出的请求进行断言并定义这些请求的响应的方法。如果未发出预期的请求或发出的请求顺序错误,则测试将失败。
后端定义允许您为应用程序定义一个伪造的后端,该后端不会断言是否发出了特定请求,如果发出了请求,它只会返回经过训练的响应。无论测试期间是否发出请求,测试都会通过。
如果您将设置更改为使用expectPOST
,则该模拟将考虑该请求。
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句