Я хотел бы создать идентичные тесты с переменными данными в Cypress. Идея заключается в том, что тестеры могут создавать новые папки в папке fixtures
, и эти папки будут автоматически подбираться и использоваться для генерации новых тестов.
Я создал этот фрагмент в моем plugins/index.js
. Когда вызывается cy.task('getAllDirectories', 'someURL')
, он выдаст мне список всех подкаталогов внутри someURL
.
const { readdirSync, lstatSync } = require('fs');
const { join } = require('path');
const _ = require('lodash');
const isDirectory = source => lstatSync(source).isDirectory();
module.exports = (on, config) => {
on('task', {
getAllDirectories(source) {
const fullSource = `${process.cwd()}/cypress/${source}`;
return readdirSync(fullSource)
.map(name => join(fullSource, name))
.filter(isDirectory)
.map(name => _.last(name.split('/')));
},
});
};
Кажется, это работает нормально, мне удалось успешно вызвать его внутри it()
и before()
в кипарисе. Проблема, однако, заключается в том, что, поскольку эти динамически генерируемые тесты являются единственными в этом файле, этот код в моем контексте вообще не запускается.
let TESTS = [];
before(() => {
cy.task('getAllDirectories', '').then((output) => {
TESTS = output;
cy.log(TESTS);
});
});
Даже когда я добавляю фиктивный тест, такой как it('dummy', () => {})
переменная TESTS установлена в новый массив имен, но уже слишком поздно для генерации тестов, когда я пытаюсь выполнить итерации ниже метода before.
TESTS.forEach((TEST) => {
it(`Validates request: ${TEST}`, () => {
...
Поэтому я решил, что мне нужно вызвать cy.task
вне теста или before
хука, однако, помещая его только внутри context()
, говорится, что cy.task
должен быть запущен внутри теста.