How can I inject parameters into a TestCafé test?

徘徊边缘 提交于 2021-01-27 17:55:44

问题


Scenario:

I run TestCafé wrapped in code, using the API I have a test I want to parameterize, testing with different dynamic values.

Problem

Testcafé has no support for sending parameters to a test. Is there a way to inject values?


回答1:


You can use process.env to pass parameters to TestCafe tests from your runner script.

//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);
});



回答2:


Yes, there is a way! The clientScripts feature can be used to send in parameters. The documentation is very well written how to inject scripts. It took me some time to figure out how to use it from within the test so hopefully this will bring you on the right track.

  1. Create a data object with your params
  2. Add the JSON to a small JS code block representing a function
  3. Inject the code block to your runner/fixture/test with the .clientScripts setter
  4. eval the code in your test et voilá! You have the parameters
// 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...
})

Now, when the test is executed the getParameters function exists inside the page head. This code can be evaluated or invoked with a ClientFunction or a t.eval:

let x = await t.eval( () => getParameters() );
console.log(x);
await t.expect(x.aString).eql('Yo!', 'Not Okey, mKay?')

An answer with a fully working example can be found here.



来源:https://stackoverflow.com/questions/58075755/how-can-i-inject-parameters-into-a-testcaf%c3%a9-test

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!