首页 > 解决方案 > 如何在 Protractor 中处理 zone-evergreen.js HTTP 400 错误请求?

问题描述

我正在使用 Angular11/Protractor 编写一个测试,它填写一个注册表单,然后将其提交到后端服务器。测试预计服务器将响应 HTTP 400 错误请求错误“电子邮件已存在”。(这是后端的正确行为)

但是测试总是会失败,因为 angular 会从 zone-evergreen.js 抛出一个我似乎无法捕捉到的错误:

zone-evergreen.js:2845 POST http://localhost:3000/users/register 400 (Bad Request)

我怎样才能捕捉到该错误或防止它干扰这个端到端测试?

这是量角器代码:

  it('it should not allow the user to register with same email address', async () => {
    // navigate to registration page by clicking on the "sign up" button
    element(by.css('a[routerLink="/auth/registration"]')).click();
    await browser.wait(EC.urlContains('http://localhost:4200/auth/registration'))
    expect(browser.getCurrentUrl()).toEqual('http://localhost:4200/auth/registration');

    // fill up the form again
    page.getRegisterFullNameInput().sendKeys(accountFullName)
    page.getRegisterEmailInput().sendKeys(accountEmail)
    page.getRegisterPasswordInput().sendKeys(accountPassword)
    page.getRegisterRepeatPasswordInput().sendKeys(accountPassword)
    page.getTermsAndConditionsCheckBox().click()

    // submit the form
    page.getRegisterSubmitButton().click()

    // wait for toastr, should throw an error
    await browser.wait(EC.visibilityOf(element(by.css('.toast-message'))));
    expect(page.getToastrMessage()).toContain('Email already registered')
  })

Chrome 中的全栈跟踪:

scheduleTask    @   zone-evergreen.js:2845
scheduleTask    @   zone-evergreen.js:385
onScheduleTask  @   zone-evergreen.js:272
scheduleTask    @   zone-evergreen.js:378
scheduleTask    @   zone-evergreen.js:210
scheduleMacroTask   @   zone-evergreen.js:233
scheduleMacroTaskWithCurrentZone    @   zone-evergreen.js:1134
(anonymous) @   zone-evergreen.js:2878
proto.<computed>    @   zone-evergreen.js:1449
(anonymous) @   http.js:1785
_trySubscribe   @   Observable.js:42
subscribe   @   Observable.js:28
call    @   tap.js:16
subscribe   @   Observable.js:23
call    @   catchError.js:14
subscribe   @   Observable.js:23
innerSubscribe  @   innerSubscribe.js:67
_innerSub   @   mergeMap.js:57
_tryNext    @   mergeMap.js:51
_next   @   mergeMap.js:34
next    @   Subscriber.js:49
(anonymous) @   subscribeToArray.js:3
_trySubscribe   @   Observable.js:42
subscribe   @   Observable.js:28
call    @   mergeMap.js:19
subscribe   @   Observable.js:23
call    @   filter.js:13
subscribe   @   Observable.js:23
call    @   map.js:16
subscribe   @   Observable.js:23
call    @   map.js:16
subscribe   @   Observable.js:23
call    @   switchMap.js:15
subscribe   @   Observable.js:23
call    @   catchError.js:14
subscribe   @   Observable.js:23
call    @   finalize.js:11
subscribe   @   Observable.js:23
call    @   take.js:22
subscribe   @   Observable.js:23
call    @   throwIfEmpty.js:13
subscribe   @   Observable.js:23
submit  @   registration.component.ts:118
RegistrationComponent_Template_form_ngSubmit_1_listener @   registration.component.html:9
executeListenerWithErrorHandling    @   core.js:14994
wrapListenerIn_markDirtyAndPreventDefault   @   core.js:15029
schedulerFn @   core.js:25687
__tryOrUnsub    @   Subscriber.js:183
next    @   Subscriber.js:122
_next   @   Subscriber.js:72
next    @   Subscriber.js:49
next    @   Subject.js:39
emit    @   core.js:25656
onSubmit    @   forms.js:5719
FormGroupDirective_submit_HostBindingHandler    @   forms.js:5774
executeListenerWithErrorHandling    @   core.js:14994
wrapListenerIn_markDirtyAndPreventDefault   @   core.js:15029
(anonymous) @   platform-browser.js:582
invokeTask  @   zone-evergreen.js:399
onInvokeTask    @   core.js:28289
invokeTask  @   zone-evergreen.js:398
runTask @   zone-evergreen.js:167
invokeTask  @   zone-evergreen.js:480
invokeTask  @   zone-evergreen.js:1621
globalZoneAwareCallback @   zone-evergreen.js:1647

标签: httpprotractorangular2-testing

解决方案


推荐阅读