$httpBackend: Angular 发送 GET 请求的单元测试
$httpBackend: Angular Unit-Testing that a GET request is sent
我想测试(组件的)控制器是否正在向某些 URL 发送 GET 请求(不关心响应)。我期待
httpBackend.expectGET('/some/random/url');
会监视 http 后端并在未收到 GET 请求时失败,因此我预计以下规范会失败:
describe('myApp', function() {
var httpBackend;
beforeEach(module('myApp'));
beforeEach(inject(function($httpBackend) {
httpBackend = $httpBackend;
}));
it('sends a GET request to /some/random/url', function() {
httpBackend.expectGET('/some/random/url');
httpBackend.expect('GET', '/some/random/url');
});
});
但这似乎平淡无奇
Starting the Teaspoon server...
Teaspoon running default suite at http://127.0.0.1:56255/teaspoon/default
..
Finished in 0.01200 seconds
2 examples, 0 failures
有了这个:
angular.module('myApp', []);
所以我想我误解了 expectGET
在做什么,这不是检查我要检查的内容的方法。
您忘记在 httpBackend 上调用 flush()
。届时它将检查是否已收到所有预期的请求。
我通常将以下代码添加到任何处理 http 模拟的规范(测试)文件中。这确保调用被刷新并且没有未完成的期望/请求。
afterEach(() => {
try {
$httpBackend.flush();
} catch (e) {
}
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
这会像这样更改您的代码
describe('myApp', function() {
var httpBackend;
beforeEach(module('myApp'));
beforeEach(inject(function($httpBackend) {
httpBackend = $httpBackend;
}));
afterEach(() => {
try {
httpBackend.flush();
} catch (e) { // entering here is a sign your unit test failed
}
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('sends a GET request to /some/random/url', function() {
httpBackend.expectGET('/some/random/url');
httpBackend.expect('GET', '/some/random/url');
});
});
我想测试(组件的)控制器是否正在向某些 URL 发送 GET 请求(不关心响应)。我期待
httpBackend.expectGET('/some/random/url');
会监视 http 后端并在未收到 GET 请求时失败,因此我预计以下规范会失败:
describe('myApp', function() {
var httpBackend;
beforeEach(module('myApp'));
beforeEach(inject(function($httpBackend) {
httpBackend = $httpBackend;
}));
it('sends a GET request to /some/random/url', function() {
httpBackend.expectGET('/some/random/url');
httpBackend.expect('GET', '/some/random/url');
});
});
但这似乎平淡无奇
Starting the Teaspoon server...
Teaspoon running default suite at http://127.0.0.1:56255/teaspoon/default
..
Finished in 0.01200 seconds
2 examples, 0 failures
有了这个:
angular.module('myApp', []);
所以我想我误解了 expectGET
在做什么,这不是检查我要检查的内容的方法。
您忘记在 httpBackend 上调用 flush()
。届时它将检查是否已收到所有预期的请求。
我通常将以下代码添加到任何处理 http 模拟的规范(测试)文件中。这确保调用被刷新并且没有未完成的期望/请求。
afterEach(() => {
try {
$httpBackend.flush();
} catch (e) {
}
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
这会像这样更改您的代码
describe('myApp', function() {
var httpBackend;
beforeEach(module('myApp'));
beforeEach(inject(function($httpBackend) {
httpBackend = $httpBackend;
}));
afterEach(() => {
try {
httpBackend.flush();
} catch (e) { // entering here is a sign your unit test failed
}
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('sends a GET request to /some/random/url', function() {
httpBackend.expectGET('/some/random/url');
httpBackend.expect('GET', '/some/random/url');
});
});