Исходя из 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);
});
});
});