Search code examples
automated-testscucumberbdde2e-testingtestcafe

TestCafe integration with cucumber - test cases in github project time out


I have been experimenting with javascript frameworks for test automation and one of them is testCafe. I have been able to set up a simple TestCafe project and run some test cases for my application. However, now, the requirement is to have some kinda BDD support built in it. I looked up a few testCafe-cucumber integration projects on GitHub but I can't get them to run. here are a few that I tried:-

1) https://github.com/rquellh/testcafe-cucumber - I cloned the repo, - did npm install, - run the test cases using "npm test", - blank browser launches but test doesn't run. I see this error in VS code console:

× Before # features\support\hooks.js:46
           Error: function timed out, ensure the promise resolves within 20000 milliseconds
               at Timeout._onTimeout (C:\Users\Mo\Desktop\TestCafe\github\testCafeBDD\testcafe-cucumber\node_modules\cucumber\src\user_code_runner.js:61:18)
               at ontimeout (timers.js:482:11)
               at tryOnTimeout (timers.js:317:5)
               at Timer.listOnTimeout (timers.js:277:5)



× After # features\support\hooks.js:60
       ReferenceError: testController is not defined

Then I tried another gitHub project namely this one : https://github.com/kiwigrid/gherkin-testcafe

the run command in readme doesn't work for me, it doesn't even recognize the "gherkin-testcafe".

When I run my TestCafe test cases without the cucumber I have this line in my package.json

"scripts": {
    "test": "testcafe chrome Tests/ -e --proxy https.proxy.mycompany.com:8000"
  },

the proxy is mentioned because I am behind a proxy and without this the browser launches but does not run any test cases. I found this fix on testCafe site

I am guessing(not sure yet) this could be the issue with cucumber integration as well. None of these frameworks work as they don't set up the proxy anywhere. Can someone point me in the right direction? if the proxy needs to be set up then where in the framework does it need to go- an example would be helpful?


Solution

  • TestCafe/Cucumber integrations rely on starting TestCafe runner programmatically.

    In the repo, search for this sequence:

    const runner = tc.createRunner();
                return runner
                    .src('./test.js')
                    .screenshots('reports/screenshots/', true)
                    .browsers(browser)
                    .run()
                    .catch(function(error) {
                        console.error(error);
                    });
    

    or search for this sequence:

    await runner
          .browsers(browsers)
          .specs(specs)
          .steps(steps)
          .concurrency(concurrency)
          .startApp(app, appInitDelay)
          .tags(tags)
          .run(...)
    

    Chain the useProxy method on runner object (do it before the run()method):

    const runner = tc.createRunner();
                return runner
                    .src('./test.js')
                    .screenshots('reports/screenshots/', true)
                    .browsers(browser)
                    .useProxy('username:password@proxy.mycorp.com')
                    .run()
                    .catch(function(error) {
                        console.error(error);
                    });