Angularjs 如何使用$httpBackend(e2e)而不刷新页面(即不使用browser.get)
我正在使用量角器和ngMockE2E来模拟api响应。如果我使用browser.get导航到下一页,效果很好。返回预期的模拟数据,但是,当我使用搜索按钮上的click()导航到下一页时,$httpBackend不会拾取GET并返回实时数据 我需要它在单击按钮时返回模拟数据,因为应用程序在加载应用程序时启动会话。Browser.get会导致页面刷新,因此尽管会返回模拟数据,但也会创建一个新会话,而这在实时环境中不会发生 $httpBackend可以在单击按钮后调用whenGET吗 我正在使用TypeScript编写代码,对于在引擎盖下使用ngMockE2E的模拟模块:Angularjs 如何使用$httpBackend(e2e)而不刷新页面(即不使用browser.get),angularjs,selenium,protractor,Angularjs,Selenium,Protractor,我正在使用量角器和ngMockE2E来模拟api响应。如果我使用browser.get导航到下一页,效果很好。返回预期的模拟数据,但是,当我使用搜索按钮上的click()导航到下一页时,$httpBackend不会拾取GET并返回实时数据 我需要它在单击按钮时返回模拟数据,因为应用程序在加载应用程序时启动会话。Browser.get会导致页面刷新,因此尽管会返回模拟数据,但也会创建一个新会话,而这在实时环境中不会发生 $httpBackend可以在单击按钮后调用whenGET吗 我正在使用Typ
//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');
}
据我所知,模拟应该在整个浏览器会话期间处于“活动”状态。能否请您添加更多详细信息,提供“模拟”代码以及您试图模拟的请求的详细信息?谢谢