Прежде всего, давайте начнем с основных концепций написания тестов.
Что мне проверить?
Все строки кода должны быть проверены, чтобы достичь максимально возможного охвата - наверняка ~ 100%. С другой стороны, процент может быть ненадежным в некоторых случаях.
Почему я должен заниматься тестами?
Тесты помогают определить, не сломаны ли предыдущие реализации из-за новых функциональных возможностей. Вам просто нужно «нажать кнопку», а не проверять ее вручную.
Существует множество других концепций как на базовом, так и на высоком уровне, но давайте постараемся сделать этот список кратким и вернемся к деталям проблемы.
Чтобы продолжить ваш пример, позвольте мне оставить несколько замечаний.
it('Test getCurrencies function', async () => { ... });
Это описание теста ничего не говорит о намерении этого дела. Тестирует функцию, но как? Какие части функции он охватывает? На эти вопросы действительно сложно ответить без конкретных деталей в описании.
const spy = jest.spyOn(wrapper.find('TransactionForm').instance(), 'getCurrencies');
Я не уверен, что такое TransactionForm
, но согласно официальной документации он принимает следующие параметры:
jest.spyOn(object, methodName)
Вы уверены, что wrapper.find('TransactionForm').instance()
возвращает объект, а также содержит функцию getCurrencies
?
let response = await DropdownModels.getCurrencies({ user, services });
Довольно странно - и запутанно - что DropdownModels
также имеет метод getCurrencies
. Это может не быть проблемой, но я бы предпочел переименовать его.
Наконец, вот несколько примеров тестовых случаев, которые могут быть хорошей отправной точкой в вашем случае:
describe("getCurrencies", () => {
it("calls `DropdownModels.getCurrencies` with `user` and `services` props", () => {
// Don't forget to set the desired props as you did it in your samples.
// Simply mock `DropdownModels.getCurrencies` with `jest.spyOn`.
});
it("sets `temp` into the state", () => {
// Test whether the expected data is set into the state.
});
});