有谁知道如何在角度 e2e 测试中模拟 $httpBackend ?这个想法是在 travis-ci 上运行测试时存根 XHR 请求。我正在使用 karma 来代理我在 travis 上运行的 rails 应用程序的资产和部分。我想在没有真正数据库查询的情况下进行验收测试。
这是我的业力配置文件的一部分:
...
files = [
MOCHA,
MOCHA_ADAPTER,
'spec/javascripts/support/angular-scenario.js',
ANGULAR_SCENARIO_ADAPTER,
'spec/javascripts/support/angular-mocks.js',
'spec/javascripts/e2e/**/*_spec.*'
];
...
proxies = {
'/app': 'http://localhost:3000/',
'/assets': 'http://localhost:3000/assets/'
};
...
这是我的规范文件的一部分:
beforeEach(inject(function($injector){
browser().navigateTo('/app');
}));
it('should do smth', inject(function($rootScope, $injector){
input('<model name>').enter('smth');
//this is the point where I want to stub real http query
pause();
}));
我尝试通过 $injector 接收 $httpBackend 服务:
$injector.get('$httpBackend')
但这不是在我的测试运行的 iframe 中使用的那个。
我的下一次尝试是使用 angular.scenario.dsl,这里是代码示例:
angular.scenario.dsl('mockHttpGet', function(){
return function(path, fakeResponse){
return this.addFutureAction("Mocking response", function($window, $document, done) {
// I have access to window and document instances
// from iframe where my tests run here
var $httpBackend = $document.injector().get(['$httpBackend']);
$httpBackend.expectGET(path).respond(fakeResponse)
done(null);
});
};
});
使用示例:
it('should do smth', inject(function($rootScope, $injector){
mockHttpGet('<path>', { /* fake data */ });
input('search.name').enter('mow');
pause();
}));
这会导致以下错误:
<$httpBackend listing> has no method 'expectGET'
所以,在这一点上,我不知道下一步。有没有人尝试过这样做,这种类型的存根真的可能吗?