Условно запустить тесты в Jest - PullRequest
0 голосов
/ 07 октября 2019

Я пытался сравнить функциональную парадигму и объектно-ориентированную парадигму.

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

У меня есть несколько тестов, которые сейчас выглядят так:

it("functional-approach-2 perforance test", () => {
    console.info("Functional Approach 2 Performance Test"); 
    const t0 = Date.now(); 
    const m0 = getMemory(); 
    const li0 = instantiateFanRecursive(20, 2, 0, 0, 1, 1, 2, 1);
    const r0 = getDrawablesFromLineInstances(li0); 
    printMemory(getMemory() - m0); 
    console.info(`Length: ${r0.length}`); 
    console.info(`Time Taken: ${Date.now() - t0}ms`); 
}); 

Сейчас я просто печатаю, сколько времени занимает выполнение этого кода (около 5000 мс).

Мне нравится использовать Jest для всех утверждений и функций имитации, которые он дает, и для его перезагрузки в реальном времени и т. Д.

Однако я не хочу, чтобы эти тесты выполнялись постоянно, яd запустите создание сценария npm, например npm test:performance, и запускайте эти тесты только при наличии переменной среды или аналогичной.

Какой лучший способ сделать это?

1 Ответ

0 голосов
/ 07 октября 2019

Вот одно из решений, создайте функцию itif, чтобы мы могли запускать модульные тесты в зависимости от некоторых условий.

Например, функция itif:

export const itif = (name: string, condition: () => boolean | Promise<boolean>, cb) => {
  it(name, async done => {
    if (await condition()) {
      cb(done);
    } else {
      console.warn(`[skipped]: ${name}`);
      done();
    }
  });
};

Юнит-тесты:

describe('test suites', () => {
  itif(
    'functional-approach-2 perforance test',
    async () => process.env.PERFORMANCE_TEST === 'true',
    done => {
      console.info('Functional Approach 2 Performance Test');
      const t0 = Date.now();
      const m0 = getMemory();
      const li0 = instantiateFanRecursive(20, 2, 0, 0, 1, 1, 2, 1);
      const r0 = getDrawablesFromLineInstances(li0);
      printMemory(getMemory() - m0);
      console.info(`Length: ${r0.length}`);
      console.info(`Time Taken: ${Date.now() - t0}ms`);
      done();
    }
  );
});

Запуск юнит-теста при значении переменной среды process.env.PERFORMANCE_TESTравно 'true', результат:

PERFORMANCE_TEST=true npm t -- /Users/elsa/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/58264344/index.spec.t

> jest-codelab@1.0.0 test /Users/elsa/workspace/github.com/mrdulin/jest-codelab
> jest --detectOpenHandles "/Users/elsa/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/58264344/index.spec.ts"

 PASS  src/stackoverflow/58264344/index.spec.ts
  test suites
    ✓ functional-approach-2 perforance test (18ms)

  console.info src/stackoverflow/58264344/index.spec.ts:22
    Functional Approach 2 Performance Test

  console.log src/stackoverflow/58264344/index.spec.ts:4
    0

  console.info src/stackoverflow/58264344/index.spec.ts:28
    Length: 0

  console.info src/stackoverflow/58264344/index.spec.ts:29
    Time Taken: 5ms

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        5.67s, estimated 9s

Не запускать модульный тест, если значение переменной окружения process.env.PERFORMANCE_TEST не установлено:

npm t -- /Users/elsa/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/58264344/index.spec.ts

> jest-codelab@1.0.0 test /Users/elsa/workspace/github.com/mrdulin/jest-codelab
> jest --detectOpenHandles "/Users/elsa/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/58264344/index.spec.ts"

 PASS  src/stackoverflow/58264344/index.spec.ts
  test suites
    ✓ functional-approach-2 perforance test (11ms)

  console.warn src/stackoverflow/58264344/index.spec.ts:11
    [skipped]: functional-approach-2 perforance test

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.758s, estimated 5s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...