Testcafe - Тестовый аргумент командной строки вне тестового примера

По мере знакомства с Testcafe я пытаюсь использовать аргумент командной строки, чтобы дать пользователю больше информации о том, как запускать тесты. По этой причине я использую пакет minimist.

Однако я не могу печатать или использовать какие-либо переменные вне тестовых случаев. Пожалуйста, найдите мой код ниже.

import { Selector } from 'testcafe';
import minimist from 'minimist';

const args = minimist(process.argv.slice(2));
const env = args.env;

console.log('*** A SAMPLE CONSOLE OUTPUT ***'); // does not print

fixture `Getting Started`
  .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
  console.log('*** ANOTHER SAMPLE CONSOLE OUTPUT ***'); // prints
  await t
    .typeText('#developer-name', 'John Smith')
    .wait(1000)
    .click('#submit-button')

    // Use the assertion to check if the actual header text is equal to the expected one
    .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');
});

Я хочу написать оператор if, который проверяет env === '' или использует аргумент по умолчанию.

Как я могу этого добиться?


person Community    schedule 14.02.2019    source источник


Ответы (2)


Однако я не могу печатать или использовать какие-либо переменные вне тестовых случаев.

Пожалуйста, используйте способ программирования для запуска TestCafe. Я изменил ваш пример кода (test.js) и создал файл, который запускает TestCafe программно (run.js). Поместите эти файлы в папку и выполните команду 'node run.js --env value' в вашем терминале. Тогда вы увидите следующий результат:

'*** A SAMPLE CONSOLE OUTPUT ***'
Getting Started
value
test.js

import { Selector } from 'testcafe';
import minimist from 'minimist';

const args = minimist(process.argv.slice(2));
const env = args.env;

console.log('*** A SAMPLE CONSOLE OUTPUT ***'); 

fixture `Getting Started`
  .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
  console.log(env); // prints
  await t
    .typeText('#developer-name', 'John Smith')
    .wait(1000)
    .click('#submit-button')
    .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');
});
run.js
const createTestCafe = require('testcafe');
let runner           = null;

createTestCafe('localhost', 1337, 1338, void 0, true)
    .then(testcafe => {
        runner = testcafe.createRunner();
    })
    .then(() => {
         return runner
            .src('test.js')
            .browsers('chrome')
            .run()
            .then(failedCount => {
                console.log(`Finished. Count failed tests:${failedCount}`);
                process.exit(failedCount)
            });
    })
    .catch(error => {
        console.log(error);
        process.exit(1);
    });
person mlosev    schedule 15.02.2019

Решение для этого:

1) Создайте отдельный файл config.js, который будет обрабатывать ваши пользовательские параметры командной строки:

import * as minimist from 'minimist';

const args = minimist(process.argv.slice(2));

// get the options --env=xxx --user=yyy from the command line
export const config = {
  env: args.env,
  user: args.user,
};

2) В вашем тестовом файле:

удалите любой код за пределами методов fixture и test.

импортировать файл конфигурации и вставить его в контекст TestController

получить аргументы команды через контекст TestController

import 'testcafe';
import { Selector } from 'testcafe';
import { config } from './config';

fixture('Getting Started')
  .beforeEach(async (t) => {
    // inject config in the test context
    t.ctx.currentConfig = config;
  });

test('My first test', async (t) => {
  // retrieve cli args from the test context
  const currentConfig = t.ctx.currentConfig;
  console.log(`env=${currentConfig.env}`);
});
person hdorgeval    schedule 14.02.2019
comment
а что, если пользователь вызывает тестовый сценарий без каких-либо параметров? (или с неправильным / несуществующим) - person ; 15.02.2019
comment
@William, config.env будет просто неопределенным. - person hdorgeval; 16.02.2019