如何将参数注入 TestCafé 测试?
How can I inject parameters into a TestCafé test?
场景:
我 运行 TestCafé 包装在代码中,使用 API
我有一个要参数化的测试,使用不同的动态值进行测试。
问题
Testcafé 不支持向测试发送参数。有没有办法注入值?
是的,有办法! clientScripts
特性可用于发送参数。该文档写得很好如何注入脚本。我花了一些时间才弄清楚如何在测试中使用它,希望这能让您走上正确的轨道。
- 使用您的参数创建一个数据对象
- 将 JSON 添加到表示函数的小 JS 代码块中
- 使用
.clientScripts
setter 将代码块注入您的 runner/fixture/test
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 函数存在于页面头部内部。可以使用 ClientFunction
或 t.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);
});
场景:
我 运行 TestCafé 包装在代码中,使用 API 我有一个要参数化的测试,使用不同的动态值进行测试。
问题
Testcafé 不支持向测试发送参数。有没有办法注入值?
是的,有办法! clientScripts
特性可用于发送参数。该文档写得很好如何注入脚本。我花了一些时间才弄清楚如何在测试中使用它,希望这能让您走上正确的轨道。
- 使用您的参数创建一个数据对象
- 将 JSON 添加到表示函数的小 JS 代码块中
- 使用
.clientScripts
setter 将代码块注入您的 runner/fixture/test
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 函数存在于页面头部内部。可以使用 ClientFunction
或 t.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);
});