当期望表单有效时,e2e 测试失败

e2e test fails when expecting form to be valid

我是 运行 一个 e2e 测试,它在我的一个组件上失败了,特别是在 expect 上。这样填写后我的表格应该有效

这是测试:

  it("1: Should create a new sitter", async () => {
        browser.get('/register-sitter');
        // Do something
        element(by.id('firstname')).sendKeys('Susan');
        element(by.id('lastname')).sendKeys('Winston');
        element(by.id('birthdate')).sendKeys('4/18/2018');
        element(by.id('gender')).all(by.tagName('mat-radio-button')).get(0).click();
        element.all(by.css('mat-select')).each(function (eachElement) {
            eachElement.click();                    //select the select
            browser.driver.sleep(500);              //wait for the renderings to take effect
            element(by.css('mat-option')).click();  //select the first mat-option
            browser.driver.sleep(500);              //wait for the renderings to take effect
        });
        element(by.id('username')).sendKeys('s.w@com');
        element(by.id('password')).sendKeys('susu123W');
        element(by.id('register')).click();
        element(by.css('form')).submit();
        // Expect something

   expect(element(by.css('form')).getAttribute('class')).toContain('ng-valid');
   });

试试

fixture.detectChanges(); 

在 expect 调用之前。

你的测试的每一行都是一个异步调用,如果你试图在上一个调用结束之前断言结果,你可能会出错。

您可以利用量角器函数返回的承诺,而不是使用 browser.driver.sleep,并同步应该同步的内容。

例如这段代码:

element(by.id('firstname')).sendKeys('Susan');
element(by.id('lastname')).sendKeys('Winston');

将被替换为:

element(by.id('firstname')).sendKeys('Susan')
.then(() => element(by.id('lastname')).sendKeys('Winston'));

这样您就可以在完成之前的所有操作后进行验证。