Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用$httpBackend(e2e)而不刷新页面(即不使用browser.get)_Angularjs_Selenium_Protractor - Fatal编程技术网

Angularjs 如何使用$httpBackend(e2e)而不刷新页面(即不使用browser.get)

Angularjs 如何使用$httpBackend(e2e)而不刷新页面(即不使用browser.get),angularjs,selenium,protractor,Angularjs,Selenium,Protractor,我正在使用量角器和ngMockE2E来模拟api响应。如果我使用browser.get导航到下一页,效果很好。返回预期的模拟数据,但是,当我使用搜索按钮上的click()导航到下一页时,$httpBackend不会拾取GET并返回实时数据 我需要它在单击按钮时返回模拟数据,因为应用程序在加载应用程序时启动会话。Browser.get会导致页面刷新,因此尽管会返回模拟数据,但也会创建一个新会话,而这在实时环境中不会发生 $httpBackend可以在单击按钮后调用whenGET吗 我正在使用Typ

我正在使用量角器和ngMockE2E来模拟api响应。如果我使用browser.get导航到下一页,效果很好。返回预期的模拟数据,但是,当我使用搜索按钮上的click()导航到下一页时,$httpBackend不会拾取GET并返回实时数据

我需要它在单击按钮时返回模拟数据,因为应用程序在加载应用程序时启动会话。Browser.get会导致页面刷新,因此尽管会返回模拟数据,但也会创建一个新会话,而这在实时环境中不会发生

$httpBackend可以在单击按钮后调用whenGET吗

我正在使用TypeScript编写代码,对于在引擎盖下使用ngMockE2E的模拟模块:

//httpBackEndMocks.ts
var HttpBackend = require('http-backend-proxy');

var proxy = new HttpBackend(browser);

export class HttpBackendMocks {

    /**
     * Builds a mock module passing any number of the responses below
     */
    buildMockModule = (funcs: Function[]) => {
        if (Array.isArray(funcs)) {
            for (var arrayIndex in funcs) {
                funcs[arrayIndex];
            }
        }
        /** Allow all other GET requests to pass through e.g. html pages */
        proxy.onLoad.whenGET(/.*/).passThrough();
    }

    /**
     * ...
     */
    buildSimpleResponse() {
        var response = require('../responses/simple-respsonse.json');
        return proxy.onLoad.whenGET('the request url').respond(response);
    }

    otherResponse() {whenGET...}

    otherResponse() {whenGET...}

    ....
我可以要求:

//search.page.spec

var httpBackEndMocks: app.test.HttpBackendMocks = require('../httpBackEndMocks.js');
并加载我需要的响应:

beforeEach:
var responsesToLoad = [
       httpBackEndMocks.buildSimpleResponse(),
       httpBackEndMocks.otherResponse()
        ];
httpBackEndMocks.buildMockModule(responsesToLoad);
当我使用以下内容转到下一页时:

//search.object.page

browser.get('the url ...');
this.submitButton.click(); //Code to cause button click omitted
它起作用了。它返回模拟数据,但在初始化新会话时导致页面刷新

当我使用以下内容转到下一页时:

//search.object.page

browser.get('the url ...');
this.submitButton.click(); //Code to cause button click omitted

它在不刷新页面的情况下切换到下一页,因此在同一会话中,但会返回实时数据。

我自己为任何有类似问题的人想出了一个解决方案:

在量角器启动应用程序之前,应添加具有任何必需响应的模拟模块。这样,每当调用初始的browser.get(…)加载主页时,所有whenget都将被注册

open(responsesToLoad: any[]): void {
        this.buildMockModuleWithRequiredResponses(responsesToLoad);
        browser.get('/home');
    }

据我所知,模拟应该在整个浏览器会话期间处于“活动”状态。能否请您添加更多详细信息,提供“模拟”代码以及您试图模拟的请求的详细信息?谢谢