Lorsque je souhaite ajouter des requestHooks (par exemple) à mon test et à mon appareil, je ne sais pas trop où le faire.
J'utilise ce repo https://github.com/rquellh/testcafe-cucumber
3 Réponses :
testController
est disponible dans les étapes Étant donné
, Quand
, Puis
.
Ainsi, vous pouvez utiliser les méthodes standard du contrôleur de test: addRequestHooks et removeRequestHooks .
J'ai modifié l'exemple de https://github.com/rquellh/testcafe-cucumber pour illustrer l'utilisation de RequestLogger
.
const {Given, When, Then} = require('cucumber'); const Role = require('testcafe').Role; const RequestLogger = require('testcafe').RequestLogger; const githubPage = require('../support/pages/github-page'); const logger = new RequestLogger('https://github.com'); Given(/^I open the GitHub page$/, async function() { await testController.addRequestHooks(logger); await testController.navigateTo(githubPage.github.url()); }); ... Then(/^Logger should contain captured request information$/, async function() { await testController.expect(logger.contains(record => record.response.statusCode === 200)).ok(); }); ...
Je trouve une solution. cependant, il n'est pas stable: il renvoie parfois une erreur: '[objet DOMException]: \ n Aucune trace de pile disponible'. Peut-être que quelqu'un sait pourquoi? Le code (après creat mock et logger object comme dans le document testCafe):
When('I log in as free user', async () => { await testController.addRequestHooks(mock) await testController.addRequestHooks(logger) await testController.wait(2000) await testController .click(selector) .typeText(selector,string, {replace : true}) .typeText(selector,string, {replace: true}) .click(selector); });
UPDATE: maintenant cela fonctionne avec la fonction wait (), mais peut-être y a-t-il une réponse plus élégante pour cela? p>
La solution est basée sur la réponse @mlosev: stackoverflow.com/a/56043709/9608547
Ma solution (gherkin-testcafe: ^ 2.2.0):
La définition:
const {Given, When, Then} = require('cucumber'); const {RequestLogger} = require('testcafe'); let logger; Given(/there is the (.+)/, async (t, [url]) => { logger = RequestLogger(url, { logResponseHeaders: true, }); await t.addRequestHooks(logger); await t.navigateTo(url); }); When(/I check the response status/, async t => { await t.expect(logger.contains(record => record.response.statusCode === 200)).ok(); }); Then(/the http (.+) equals the (.+)/, async (t, [name, value]) => { await t.expect(logger.contains(record => record.response.headers.server === value)).ok(); });
Et l'implémentation:
Feature: Check server names Scenario Outline: Fetch pages Given there is the <url> When I check the response status Then the http <prameter> equals the <value> Examples: | url | prameter | value | | https://www.seznam.cz | server | nginx | | https://www.google.com | server | gws |