Как работают библиотеки утверждений, такие как Chai, без принудительного вызова функции?
В Chai вы можете сделать следующее:
expect({}).to.exist;
exist
не является вызовом функции, но это все еще работает в тестовых средах. Противоположность (expect({}).to.not.exist
) заставляет тесты сбой, но опять же, exist
не является вызовом функции.
Как эти утверждения работают, не заставляя меня вызывать функцию? На самом деле, если я попытаюсь сказать expect({}).to.exist()
, тест завершится неудачно, потому что exist
не является функцией.
Ответы
Ответ 1
Я понял это (или, по крайней мере, понял метод). Используйте JavaScript getters:
var throws = {
get a() {
throw new Error('a');
},
get b() {
throw new Error('b');
},
get c() {
throw new Error('c');
}
};
При выполнении throws.a
, throws.b
или throws.c
будет выбрана соответствующая ошибка.
С этой точки довольно легко построить утверждения, которые содержатся в Chai.