Angular 测试因 ng e2e 失败,但使用量角器 conf.js 通过

Posted

技术标签:

【中文标题】Angular 测试因 ng e2e 失败,但使用量角器 conf.js 通过【英文标题】:Angular tests fails with ng e2e but pass with protractor conf.js 【发布时间】:2020-04-02 06:57:44 【问题描述】:

在为 Angular 应用程序进行测试自动化时,我遇到了一个问题,即每当我尝试使用 Angular 命令ng e2e 运行测试套件时,所有测试都会失败。量角器命令protractor conf.js 通过了相同的测试。我想问一下这种奇怪行为的原因。提供了规范。 谢谢

import  AddMemberClass  from '../../pages/add-member/add-member.page';
import  LoginPage  from '../../pages/login/login.page';
import  browser, promise, by  from 'protractor';


fdescribe('Add Member as Admin',()=>

    let addMemeber: AddMemberClass;
    let login : LoginPage;

    beforeAll(()=>
        login = new LoginPage();
        addMemeber = new AddMemberClass();
        return new Promise((resolve)=>
            login.navigateTo().then(()=>
                login.getEmailInput().sendKeys('something@gmail.com');
                login.getPasswordInput().sendKeys('13235');
                login.getLoginButton().click().then(()=>
                    setTimeout(()=>
                        expect(browser.getCurrentUrl()).toContain('organization').then(()=>
                            resolve();
                            );
                    ,30000);
                );
            );
        );    
    ); 
    
    it('should login successfully', ()=>
        return addMemeber.getMemberMenu().click().then(()=>
            console.log('test1');
            return addMemeber.getAddMemberSubMenu().click().then(()=>
                 console.log('inside test 1');
                return  new Promise((resolve)=>
                    setTimeout(()=>
                        expect(browser.getCurrentUrl()).toContain('directregistration').then(()=>
                        resolve();
                        );
                    ,30000)
                )
            )
        )
        
    );    
   
    it('should check member Menu on main page',()=>
        return new Promise((resolve,reject)=>
           setTimeout(()=>
                console.log('Inside test 2 timeout');
                expect(addMemeber.getMemberMenu().isPresent()).toBe(true);
                resolve();
            ,5000)    
        );     
    );

  
    )

);

【问题讨论】:

如果您向我们提供准确的错误信息,那就太好了 问题是你的 setTimeout 和 Promises。这不是应该做的:) @LuninRoman 错误是 jasmine.DEFAULT_TIMEOUT @PierreDuc 你能解释一下吗?将不胜感激 @Analyst 我建议你看看angular.io/guide/testing。你应该使用async。您收到错误是因为默认超时远小于您希望测试等待的 30 秒。 【参考方案1】:

我面临的问题是 ng e2e 它首先服务于应用程序,然后运行 ​​e2e 测试用例。运行命令 protractor conf.js,它没有被提供,产生问题并且所有测试用例都失败

【讨论】:

以上是关于Angular 测试因 ng e2e 失败,但使用量角器 conf.js 通过的主要内容,如果未能解决你的问题,请参考以下文章

如何使用“ng e2e”对节点服务器而不是 webpack-dev-server 运行量角器测试

markdown Angular CLI:ng lint,ng test,ng e2e

量角器测试在第二次运行中因ng-reflect属性而失败

使用带有 Angular2 和 Socket.io 的量角器运行 e2e 测试

ng build —prod 失败但能够运行

测试执行因源自 Hammerhead 的请求管道的问题而随机中止(Testcafe e2e 测试)