Учимся тестировать проекты Vue.js: список продуктов - PullRequest
0 голосов
/ 03 мая 2018

У меня есть небольшое приложение Vue.js, которое выбирает и отображает список продуктов. Приложение должно позволять сортировать товары по размеру, по ценовому диапазону, по алфавиту и т. Д. - все вперед и назад.

Есть юнит-тесты, интеграционные тесты, тесты E2E и т. Д.

Для этого конкретного приложения я представляю, что:

  • За тестирование компонентов отвечают методы модульных испытаний

  • Интеграционные тесты: Ответственный за вывод определенного действия / функции:

    • Действительно ли отображаются продукты?
    • Является ли диапазон цен от 0% до 100% возврата каких-либо продуктов?
  • E2E тесты - не совсем точно.

В этом конкретном упрощенном примере какие тесты должны быть там, чтобы охватить абсолютный минимум?

Любые мысли приветствуются!

1 Ответ

0 голосов
/ 03 мая 2018

Во-первых, ваши определения не совсем верны. Я настоятельно рекомендую вам взглянуть на Виталия Зайдмана * Обзор тестирования JavaScript в 2018 году .

Вы найдете разницу между типами тестов:

  • Модульные тесты - тестирование отдельных функций или классов путем подачи ввода и проверки того, что вывод соответствует ожидаемому.

  • Интеграционные тесты - тестирование процессов или компонентов на поведение, как ожидается, включая побочные эффекты.

  • UI Tests- (A.K.A Functional Tests) Тестирование сценариев на самом продукте с помощью управления браузером или веб-сайтом независимо от внутренней структуры для обеспечения ожидаемого поведения.

Вы также узнаете обо всех типах инструментов тестирования , доступных платформах и, в основном, обо всем, что вам нужно для начала работы и тестирования своих компонентов.

Что касается , какие тесты должны быть там, чтобы покрыть абсолютный минимум , это субъективно. Лично мне нравится тестировать все вычисленные свойства, наблюдатели, хуки и методы жизненного цикла (все, что имеет логику), но это может быть немного в вашем случае, это ваш вызов!


Редактировать:

Вы спросили у моего , как писать ХОРОШИЕ тесты и, опять же, это очень субъективно.

Вы можете найти новый способ ведения дел для каждой статьи блога.

Что наиболее важно, так это то, что каждый модульный тест должен утверждать только одно поведение . тестовая структура также очень важна

Вот пример, если бы мне пришлось тестировать компонент, который отображает продукты, как в вашем случае:

Примечание: здесь я использую Jest и Vue Test Utils , но вы можете использовать понравившуюся платформу, я просто показываю вам, как это сделать на очень простые и понятные детали.

Мой компонент имеет вычисленное свойство displayProducts , которое принимает данные products и сортирует их по имени в порядке возрастания или убывания на основе данных order .

// Products.spec.js

// Importing vue-test-utils methods (see the API doc : https://vue-test-utils.vuejs.org/en/api/)
import { mount } from '@vue/test-utils';
// Importing the tested component
import Products from '@/[...]/Product';

describe('Products.vue', () => {
  // vue-test-utils' wrapper and Vue instance, used in every tests
  let wrapper;
  let vm;
  const productsMock = [{
    name: 'First product',
  }, {
    name: 'Second product',
  }];

  // Before each test, we mount a new instance
  beforeEach(() => {
    // Mounting and inject the products (see the complete documentation here : https://vue-test-utils.vuejs.org/en/api/mount.html)
    wrapper = mount(Products, {
      products: productsMock,
    });
    vm = wrapper.vm; 
  });

  // Nested 'describe' to make your tests more verbose
  describe('products', () => {
    // Basic test, display the list ordered by names in ascending order
    it('should display the products', () => {
      expect(vm.displayedProducts).toBe(productsMock);
    });

    // Test that the list is reversed when 
    it('should reverse the products list when ordering in descending order', () => {
      vm.order = 'desc';
      expect(vm.displayedProducts).toBe(productsMock.reverse());
    });

    // [...] test that the order's default value is 'asc'
    // [...] test that the list is sorted by the right value, etc...
  });
});

Обратите внимание, что тесты читаемы, начиная с первого describe до it (пример: Products.vue => products => should display the products).

Вы действительно должны прочитать всю документацию Vue Test Utils , чтобы ознакомиться со всеми аспектами тестов Vue.js.

...