【发布时间】:2021-04-26 04:06:04
【问题描述】:
我的应用程序在页面加载时立即对我的后端进行 http 调用。我的 e2e 测试失败了,因为我的 ci 管道中没有运行后端。
我尝试在 http 调用上使用 rxjs catchError 管道运算符
我尝试将整个 http 调用包装在 try / except 块中
我仍然在开发控制台中显示错误(这导致 e2e 测试失败)
我想知道如何为量角器测试提供模拟 HttpClient?
实际的Http调用
return this.http.get<any>( url ).subscribe(...)
(this.http 是 Angular 的 HttpClient 的一个实例)
规格文件:
import { AppPage } from './app.po';
import { browser, logging } from 'protractor';
describe( 'workspace-project App', () => {
let page: AppPage;
beforeEach( () => {
page = new AppPage();
} );
it( 'should display login page', () => {
page.navigateTo();
expect( page.getLoginTitleText() ).toEqual( 'Welcome to\nApp\nClick below to sign in with Google' );
} );
afterEach( async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get( logging.Type.BROWSER );
expect( logs ).not.toContain( jasmine.objectContaining( {
level: logging.Level.SEVERE,
} as logging.Entry ) );
} );
} );
量角器的页面对象文件 (app.po)
import { browser, by, element } from 'protractor';
export class AppPage {
public navigateTo() {
return browser.get( browser.baseUrl ) as Promise<any>;
}
public getLoginTitleText() {
return element( by.css( 'app-root app-login div.login-wrapper form.login section.title' ) )
.getText() as Promise<string>;
}
}
【问题讨论】:
-
更常用的方法是为您的 api 调用制作带有一些预定义响应的模拟后端服务器,并在此基础上实现您的测试。我相信有很多库支持这种实现。如果您仍想模拟 http 模块,则需要制作不同的配置/应用程序进行测试
标签: angular protractor e2e-testing