items.test.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { MenuItem } from '@/helpers/common';
  2. import { createPinia, setActivePinia } from 'pinia';
  3. import { beforeEach, describe, expect, test, vi } from 'vitest'
  4. import { useItemsStore, API_URL } from '../items';
  5. // vi - это алиас к VitestUtils
  6. vi.mock('node-fetch')
  7. const mockFetch = vi.fn()
  8. // eslint-disable-next-line no-global-assign
  9. fetch = mockFetch
  10. describe('Тестирование АПИ', () => {
  11. beforeEach(() => {
  12. setActivePinia(createPinia())
  13. })
  14. test('Успешное получение списка блюд', async () => {
  15. const mockItems = [new MenuItem('test', 10)]
  16. const itemStore = useItemsStore()
  17. mockFetch.mockResolvedValueOnce({
  18. ok: true,
  19. json: () => Promise.resolve(mockItems)
  20. })
  21. const items = await itemStore.getItems()
  22. expect(items).toEqual(mockItems)
  23. expect(mockFetch).toHaveBeenCalledWith(`${API_URL}`)
  24. })
  25. test('Ошибка при получении списка блюд', async () => {
  26. // симулируем response.ok == false
  27. mockFetch.mockResolvedValueOnce({ ok: false })
  28. const itemStore = useItemsStore()
  29. // при ошибке получения данных метод должен сгенерировать исключение
  30. // которое мы и ожидаем получить
  31. await expect(itemStore.getItems()).rejects.toThrow('Ошибка при получении списка блюд')
  32. })
  33. })