При использовании Jasmine для интеграционных тестов вы быстро окажетесь в ситуации, когда захотите отменить изменения базы данных, сделанные во время тестирования.

Если вы используете ObjectionJS, а исходный метод не использует транзакцию, у вас может возникнуть соблазн небрежно добавить необязательный параметр экземпляра транзакции к тестируемому методу (с идеей, что затем можно будет добавить новый тот, на который вы можете ссылаться для отката после завершения теста). Это ненужная и плохая практика — вместо этого просто используйте силу шпионов Жасмин!
Что нам нужно сделать, так это перехватить вызов метода запроса модели ObjectionJS во время нашего теста и вставить новую транзакцию в это время. Для этого мы будем использовать два метода Jasmine: withArgs и callFake. Вот краткая демонстрация:
Это эффективно сообщает Жасмин, что когда наша модель впервые вызывается без транзакции ('.withArgs()'), то на самом деле вызывается (.and.callFake(…)) та же модель, но на этот раз с нашей транзакцией, которая будет жить и умирать только внутри нашего тестового объема.
Точно так же ваш реальный метод остается чистым, и теперь у вас есть возможность откатить любые изменения, внесенные в вашу тестовую базу данных между тестами!