繁体   English   中英

http-backend-proxy无法与量角器e2e一起使用

[英]http-backend-proxy is not working with protractor e2e

我是e2e测试和angular的新手,并且试图弄清楚如何模拟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 / this。$ gethttp:// localhost:9000 / bower_components / angular / angular.js:15989:16 $ RootScopeProvider / this。$ gethttp:// localhost:9000 / bower_components / angular / angular.js:15800:15 $ RootScopeProvider / this。$ gethttp:// localhost:9000 / bower_components / angular / angular.js:16097:13 bootstrapApply @ http:// localhost:9000 / bower_components / angular / angular.js:1660:9 invoke @ http:// localhost:9000 / bower_components / angular / angular.js:4478:14 bootstrap / 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

页面上没有任何显示,因此保护者无法单击该元素。 我已经尝试过诸如proxy.onLoad.whenGET('/.*/').respond(200,{'mock':'data'}); ,但会发生相同的错误。

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

您可以使用相应的方法简单地对HTML和其他静态文件发出所有请求。 http-backend-proxy只会忽略它们,它们的响应将保持不变。

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

这是一种常见的方法,因为SPA通常会发出很多XHR请求来获取模板,而在大多数情况下不必嘲笑这些模板。 但是由于默认情况下http-backend跟踪所有请求,因此您必须明确指出需要忽略哪些特定请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM