如何将参数注入 TestCafé 测试?

How can I inject parameters into a TestCafé test?

场景:

我 运行 TestCafé 包装在代码中,使用 API 我有一个要参数化的测试,使用不同的动态值进行测试。

问题

Testcafé 不支持向测试发送参数。有没有办法注入值?

是的,有办法! clientScripts 特性可用于发送参数。该文档写得很好如何注入脚本。我花了一些时间才弄清楚如何在测试中使用它,希望这能让您走上正确的轨道。

  1. 使用您的参数创建一个数据对象
  2. 将 JSON 添加到表示函数的小 JS 代码块中
  3. 使用 .clientScripts setter
  4. 将代码块注入您的 runner/fixture/test
  5. eval 测试中的代码等着瞧!你有参数
// Create the data object
let data = {aString: 'Yo!', aNumber: 345}

// Add it to a String value representing a JS function
const scriptContent = `
  function getParameters() {
    return ${JSON.stringify(data)};
  }`

// Invoke the test runner with the code block as content
testcafe('localhost').then(cafe => {
    cafe.createRunner()
      .src('mytest.js')
      .clientScripts({ content: scriptContent })
      .run()
      //...and so on...
})

现在,当执行测试时,getParameters 函数存在于页面头部内部。可以使用 ClientFunctiont.eval:

评估或调用此代码
let x = await t.eval( () => getParameters() );
console.log(x);
await t.expect(x.aString).eql('Yo!', 'Not Okey, mKay?')

一个完整的答案

您可以使用 process.env 将参数从运行器脚本传递给 TestCafe 测试。

//test.js
const createTestCafe = require('testcafe');

(async => {
   process.env.foo = 'bar';

   const testcafe = await createTestCafe();

   await testcafe
       .createRunner()
       .src('test.js')
       .browsers('chrome')
       .run();

   await testcafe.close();
})()
//test.js
fixture `Examples`;

test('process.env', async t => {
    console.log(process.env.foo);
});