首页 > 解决方案 > 将 Jest 步骤定义提取到单独的文件中

问题描述

我正在使用 Jest 和 Puppeteer 进行一些 e2e 测试,但遇到了瓶颈。我想将步骤定义移动到单独的文件中,以便我可以在不同的测试中重用它们。

我遇到以下问题:

在此处输入图像描述

这是我的设置:

文件dummyTest.test.js

import {loginUser} from '../steps/test';

describe(
'dummy test',
() => {
    let page;
    beforeAll( async () => {
        const context = await browser.createIncognitoBrowserContext();
        page = await context.newPage();
        await page.setViewport( { width: 1200, height: 960 } );
        await page.goto( 'http://localhost:8080' );
    }, timeout );

    afterAll( async () => {
        await page.close();
        delay( 1000 );
        console.log( 'killing all chromium zombies' );
        exec( 'kill -9 $(ps aux | grep \'chromium\' | awk \'{print $2})\'' );
        exec( 'kill -9 $(ps aux | grep \'http-server\' | awk \'{print $2})\'' );
    }, 10000 );

    it( 'should see login page', loginUser, 10000 );
},
10000 );

文件test.js

export const loginUser = async () => {
await page.waitForSelector( 'form' );
await page.click( 'input[name=email]' );
await page.type( 'input[name=email]', 'me@me.com' );
await page.click( 'input[name=password]' );
await page.type( 'input[name=password]', 'test123' );
await page.screenshot( { path: './test-results/PrefilledLogin.png' } );
await page.keyboard.down( 'Enter' );
await page.screenshot( { path: './test-results/LoginSubmit.png' } );
};

我究竟做错了什么?

标签: jestjspuppeteer

解决方案


我解决了。

为了使它工作,我必须将页面对象和完成的回调传递给函数:

it( 'should see login page', ( done ) => loginUser( done, page ), 10000 );

推荐阅读