http-backend-proxy不适用于量角器e2e

时间:2015-12-04 22:09:07

标签: javascript angularjs http protractor e2e-testing

我是e2e测试和角色的新手,我正在试图弄清楚如何模拟http请求。我有一个应用程序,我需要xhr请求像页脚和常量文件,我想要实际通过,但实际的服务调用,如添加一些东西到数据库,我想模拟(所以每当我运行e2e测试,它不会每次都填充测试数据。

我最终会点击一个API,但只是为了得到滚动我正在使用$ http获取/someUrl该函数来处理该元素的点击。

describe('companyManagement', function() {
    var proxy;
    var HttpBackend = require('http-backend-proxy');
    beforeEach(function(){
        proxy = new HttpBackend(browser);

        proxy.onLoad.whenGET('/someUrl/').respond(200,{'mock':'data'});
        browser.get('/#/companyManagement');

        browser.pause();
        element(by.repeater('org in vm.organizations').row(0)).element(by.css('.contentHeader')).click();
    });
    it('alias should be correct in the org list', function(){
        var x;
    });
});

这是我目前的代码。我需要http-backend-proxy,并在我之前为我的it语句设置一些内容,稍后我会写。 beforeEach创建一个新的HttpBackend对象,并执行proxy.onLoad.whenGET('/someUrl').respond(200,{mock:'data'});。然后我获取页面(在我的.conf文件中设置了baseUrl),并暂停浏览器以便我可以查看控制台。此时,当我查看浏览器控制台时,它会出现我的意外请求错误。一个用于modules/footer/footer.html,另一个用于constants/constants.json

  

错误:意外请求:GET modules / footer / footer.html   没有更多的要求   $ httpBackend @ http://localhost:9000/bower_components/angular-mocks/angular-mocks.js:1244:1   sendReq @ http://localhost:9000/bower_components/angular/angular.js:10515:1   $ HTTP / serverRequest @ http://localhost:9000/bower_components/angular/angular.js:10222:16   processQueue @ http://localhost:9000/bower_components/angular/angular.js:14745:28   scheduleProcessQueue /< @ http://localhost:9000/bower_components/angular/angular.js:14761:27   $ RootScopeProvider / $这gethttp://本地主机:9000 / bower_components /角度/ angular.js:15989:16   $ RootScopeProvider / $这gethttp://本地主机:9000 / bower_components /角度/ angular.js:15800:15   $ RootScopeProvider / $这gethttp://本地主机:9000 / bower_components /角度/ angular.js:16097:13   bootstrapApply @ http://localhost:9000/bower_components/angular/angular.js:1660:9   调用@ http://localhost:9000/bower_components/angular/angular.js:4478:14   自举/ doBootstrap @ http://localhost:9000/bower_components/angular/angular.js:1658:1   bootstrap/angular.resumeBootstrap@http://localhost:9000/bower_components/angular/angular.js:1686:12   匿名@ http://localhost:9000/#/companyManagement第69行>功能:1:1   handleEvaluateEvent @ http://localhost:9000/#/companyManagement:69:20

页面上没有显示任何内容,因此protactor无法单击该元素。我尝试了proxy.onLoad.whenGET('/.*/').respond(200,{'mock':'data'});之类的内容,但发生了同样的错误。

有人可以向我解释如何正确模拟http请求吗?

1 个答案:

答案 0 :(得分:2)

您可以使用相应的方法简单地对HTML和其他静态文件的所有请求进行传递。 http-backend-proxy 将忽略它们,它们的响应将不受影响。

proxy.onLoad.whenGET(/\.html$/).passThrough();
proxy.onLoad.whenGET(/constants\.json$/).passThrough();

它'一种常见的方法,因为SPA通常会提取很多XHR请求来获取模板,在大多数情况下不必嘲笑它们。但是因为 http-backend 默认跟踪所有请求,所以你必须明确告诉哪些特定的请求需要被忽略。