单元测试的想法是概述应用程序的一小部分应该如何工作。如果它通过了该测试,您就知道它按规定运行。
如果您想测试向您的 API 发送请求的服务,您可以设置单元测试来检查传出请求的位置/内容/是否存在,并验证它是否正确响应了一个有效的回复。但是,为了使测试尽可能具体,它不应该测试那个小气泡之外的任何东西。
假设我们要测试这个PersonService angular 服务:
app.service('PersonService', function ($q, $timeout, $http) {
this.addPerson = function(data) {
var deferred = $q.defer();
$http.post('api/People', data).then(function(response) {
deferred.resolve(response);
});
return deferred.promise;
};
});
这是一个简单的 Jasmine 测试:
var service, $httpBackend;
beforeEach(module('app'));
beforeEach(inject(function(_PersonService_, _$httpBackend_) {
service = _PersonService_;
$httpBackend = _$httpBackend_;
}));
describe('addPerson', function() {
var person;
beforeEach(function() {
// Make a person to send
person = new Person({ id: "0ff1165f-7f75-45ed-8faa-ee94d874a1cf" });
});
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('should send a person object to the API', function() {
// setup
var promise, expected, actual;
expected = /* Whatever is sent back */
$httpBackend.whenPOST('api/People', person)
.respond(expected);
// act
promise = service.addPerson(person);
promise.then(function(response) {
actual = response.data;
});
$httpBackend.flush();
// assert
expect(actual).toEqual(expected);
});
});
所以我们有一个测试来检查这个非常基本的功能(不管 API 实际做什么)。这允许我们单独测试代码片段——即如果 API 被破坏,除了相关的 API 测试之外,您的 PersonService 测试不会破坏。
您想要构建以确保一切正常工作的是集成测试。