我已经尝试过并试图让它发挥作用。这文档 https://docs.angularjs.org/api/ngMock/service/%24httpBackend充其量是简洁的:
重置期望();- 重置所有请求期望,但保留所有后端定义。通常,当您想要重用 $httpBackend 模拟的同一实例时,您可以在多阶段测试期间调用 resetExpectations。
每次调用第二个请求时,我的结果始终包含第一个结果的数据。看看这个小提琴http://jsfiddle.net/tbwn1gt0/2/ http://jsfiddle.net/tbwn1gt0/2/我在第一次刷新后重置期望,然后设置新的期望/结果,然后再次刷新以产生不正确的数据。
// --- SPECS -------------------------
var url = '/path/to/resource';
var result = '';
describe('$httpBackend', function () {
it("expects GET different results in subsequent requests", inject(function ($http, $httpBackend) {
successCallback = function(data){
result = data;
}
// Create expectation
$httpBackend.expectGET(url).respond(200, 'mock data');
// Call http service
$http.get(url).success(successCallback);
// flush response
$httpBackend.flush();
console.log( result ); // logs 'mock data'
// Verify expectations
expect( result ).toContain('mock data'); // works as it should
// reset the expectations
$httpBackend.resetExpectations();
// set the fake data AGAIN
$httpBackend.expectGET(url).respond(200, 'doof the magic cragwagon');
// get the service AGAIN
$http.get(url).success(successCallback);
expect( result ).toContain('doof'); // does not work, result is original result
console.log( result ); // logs 'mock data'
}));
});
// --- Runner -------------------------
(function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function (spec) {
return htmlReporter.specFilter(spec);
};
var currentWindowOnload = window.onload;
window.onload = function () {
if (currentWindowOnload) {
currentWindowOnload();
}
execJasmine();
};
function execJasmine() {
jasmineEnv.execute();
}
})();
我尝试过的其他事情包括添加带有resetExpectations的afterEach(将每个请求放入新的it语句中)。以及一系列其他随机尝试。如果它尝试将预期的 url 更改为预期之外的内容,它就会出错——所以我知道请求至少是通过 httpBackend 处理的。
这是一个缺陷还是我错误地实现了它?
The .resetExpectations()
确实按您的预期工作,但您只是忘记刷新第二个请求的 http 请求。
// set the fake data AGAIN
$httpBackend.expectGET(url).respond(200, 'doof the magic cragwagon');
// get the service AGAIN
$http.get(url).success(successCallback);
$httpBackend.flush(); // flush the second http request here
expect( result ).toContain('doof'); // does not work, result is original result
console.log( result ); // logs 'mock data'
JSFiddle 示例: http://jsfiddle.net/4aw0twjf/ http://jsfiddle.net/4aw0twjf/
附言。事实上,$httpBackend.resetExpectations()
对于您的测试用例来说不是必需的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)