Как создать параметр c тестов с Ava - PullRequest
0 голосов
/ 24 февраля 2020

Исходя из Python, я привык к этому синтаксису при написании параметров c тестов (надеюсь, это не требует пояснений):

@pytest.mark.parametrize('a', [0, 1, 2])
@pytest.mark.parametrize('b', [0, 1, 2])
def test_sum(a, b):
    assert sum(a, b) == a + b

Затем структура тестирования будет запускаться test_sum() для каждая комбинация a и b, рассматривая каждую комбинацию как отдельный тест (то есть: 9 комбинаций могут не пройти / пройти независимо).

Я играл с Ava и, используя макросы, я легко могу запустить один и тот же тест с разными параметрами:

import test from "ava";

function sum(a, b) {
    return a + b;
}

function macroSum(t, a, b) {
    t.is(sum(a, b), a + b);
}
macroSum.title = (providedTitle = "", a, b) =>
    `${providedTitle}: ${a} + ${b}`

test(macroSum, 0, 0);
test(macroSum, 0, 1);
test(macroSum, 0, 2);
test(macroSum, 1, 0);
test(macroSum, 1, 1);
test(macroSum, 1, 2);
test(macroSum, 2, 0);
test(macroSum, 2, 1);
test(macroSum, 2, 2);

Единственная проблема заключается в том, что мне нужно явно вызвать test() несколько раз. Можно ли как-то сделать то, что я привык делать в Python? (объявите список значений для каждого параметра и дайте фреймворку объединить их и запустите все комбинации для меня)

Обратите внимание, что это не то же самое, что встраивание al oop в тест. С параметрами c тестов каждая комбинация является отдельным тестом для платформы, с другим заголовком / идентификатором и которая может не пройти / пройти независимо от других комбинаций параметров.

Это означает, что я ищу ни одного теста вроде:

test('all combinations', t => {
  [0, 1, 2].forEach(a => {
    [0, 1, 2].forEach(b => {
      t.is(sum(a, b), a + b);
    });
  });
});

1 Ответ

1 голос
/ 25 февраля 2020

Нет. Лучше всего ставить l oop по ряду параметров:

for (const params of [
  [1, 0],
  [1, 1],
]) {
  test(macroSum, ...params)
}
...