#jestjs
#jestjs
Вопрос:
Используя test.each
в шутку, я хотел бы передать логическое значение, которое определяет, ожидаю я чего-то или нет.
Это тип повторяющегося кода, которого я пытаюсь избежать:
if (expectFoo) {
expect(anObject).toContainEqual(
expect.objectContaining({
name: "foo"
})
);
} else {
expect(anObject).not.toContainEqual(
expect.objectContaining({
name: "foo"
})
);
}
Вот некоторый псевдокод, который иллюстрирует мой предпочтительный (более чистый, короткий) подход:
expect(anObject).yesOrNo(expectFoo).toContainEqual(
expect.objectContaining({
name: "foo"
})
);
Есть ли что-нибудь подобное в Jest?
Комментарии:
1. Это относится к пользовательскому сопоставителю.
2. Хорошо, но я действительно не хочу перестраивать сопоставители шутки OOTB, такие как
.toContainEqual()
,objectContaining()
и т.д. С нуля. Я не совсем уверен, как написать пользовательскую замену для чего-то подобного,not
которая находится междуexpect()
и другим сопоставителем. Можно ли это сделать?3. Не заметил комментарий. Вот пример, на случай, если он все еще актуален.
Ответ №1:
Встроенные средства сопоставления не являются общедоступным API, но могут быть импортированы из того же внутреннего модуля, который используется Jest:
import matchers from 'expect/build/matchers';
Пользовательские средства сопоставления могут переносить и составлять встроенные средства сопоставления:
expect.extend({
toContainFoo(received, expectFoo = true) {
const isNot = !expectFoo ? !this.isNot : this.isNot
this.isNot = isNot; // affects error message
const expected = matchers.objectContaining({
name: "foo"
});
const result = matchers.toContainEqual.call(this, received, expected);
result.pass = !isNot; // affects assertion logic
return resu<
}
})
Комментарии:
1. Это не совсем то, на что я надеялся, поскольку вы должны реализовать это отдельно для каждого средства сопоставления или комбинации средств сопоставления. Было бы неплохо иметь что-то вроде универсальной
not
замены, которая принимает логический параметр. Но это, безусловно, лучше, чем необходимость перестраивать логику самих сопоставителей. Спасибо!