【问题标题】:How to pass a variable from a Jest beforeAll to a Jest describe through an exported function如何通过导出函数将变量从 Jest beforeAll 传递到 Jest 描述
【发布时间】:2021-09-16 15:54:42
【问题描述】:

我想将变量 'page' 传递给 Jest 的描述函数:

describe('Filter Test', () => {

        beforeAll(async () => {
            jest.setTimeout(20000);
            browser = await puppeteer.launch()
            page = await browser.newPage();
            await page.goto(url, {waitUntil: 'networkidle2'});
            await page.setViewport({width: 1828, height: 994});

        })
    description.authenticate(page);
}

这个函数看起来像这样:

const authenticate = (page) => {


        describe('describe 1', () => {
            test('blabla 1', async () => snap.screenshotPageCompare(page,'login-page.png'));
            test('blabla 2', async () => auth.login(page));

        });
    };

exports.authenticate = authenticate;

显示的代码不起作用,“页面”显示为未定义

【问题讨论】:

  • 不能使用环境变量吗?
  • 不,变量是在之前生成的...
  • 对不起,我看错了,你打电话给description.authenticate()没有参数,这正常吗? - 这也有点奇怪,因为你在不知名的地方调用它,你为什么不把page 作为变量并将所有内容放在同一个文件中?
  • 虽然只是在这篇文章中使用了失态

标签: javascript jestjs puppeteer


【解决方案1】:

这是 Jest 的缺点之一。您可以使用其他测试框架(如 Mocha)来完成此操作,但不能使用 Jest。

原因是describe()test() 函数实际上并不运行您传入的代码,它们只是存储这些函数以供以后运行。

这意味着在您的情况下,您的 description.authenticate() 函数在任何测试运行之前调用,实际上是在 beforeAll() 代码运行之前调用,这就是您获得未定义值的原因。

您可以做到这一点的唯一方法是将代码从beforeAll() 中取出并将其放在describe() 块中的第一个位置。这样它会在创建测试时运行,但缺点是如果出现错误(例如您的浏览器设置失败),您将得到一个一般性的失败,没有详细提示出了什么问题。

这是另一个排序示例:

// Code here runs first (1)

describe('Test group', () => {

  // Code here runs third (3)

  beforeAll(() => {
    // Code here runs sixth (6)
  });

  // Code here runs fourth (4)

  test('Test case', () => {
    // Code here runs seventh (7)
  });

  // Code here runs fifth (5)

});

// Code here runs second (2)

如果您尝试将您的代码与此结构相匹配,您将看到您在 description.authenticate() 中创建的测试用例将在第 4 步中发生,但您尝试使用的变量在第 6 步。

但您也可以看到,如果您在第 4 步之前将代码移动到任何位置,那么它会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2019-06-21
    相关资源
    最近更新 更多