четверг, 27 ноября 2014 г.

Настройка автоматического тестирования web-интерфейса и сценариев javascript.

Основной материал, которым я руководствовался: http://habrahabr.ru/post/233705/

Для автоматического тестирования могут использоваться следующие компоненты, список которых приведен ниже.

На текущий момент выяснил следующие виды тестирования:
  1. Unit -тестирование, при котором пишутся тесты на каждый модуль или компоненту, написанную на JavaScript. Как правило в этом случае пишется куча моков (mocks) чтобы заткнуть различные асинхронные вызовы, а также сервисы и фабрики angular.
  2. End to end или E2E-тестирование. При таком тестировании полностью эмулируется работа пользователя в приложении.

Unit тестирование

Unit-тестирование для Javascript доступно примерно в таком же ключе, что оно работает для Java.
Ниже простейший код unit-теста, который характерен практически для любого фреймворка тестирования Javascript:
describe("employee", function() {
      var employee;    // Note the scoping of this variable.
      beforeEach(function() {
          employee = new Employee;
      });
      it("has a name", function() {
          expect(employee.name).toBeDefined();
      });
      it("has a role", function() {
          expect(employee.role).toBeDefined();
      });
      afterEach(function() {
      });
  });

Unit тесты могут запускаться прямо из браузера - при этом сперва формируется html-файл, в который подключаются js-библиотеки фреймворков тестирования и исходный код тестируемых компонентов разрабатываемого приложения.

Другой способ запуска unit тестов - специальные программы. Например - Karma.

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

E2E -тестирование

Организуется как правило с помощью сервера Selenium.
Для удобства запуска E2E тестов и создания скриптов может использоваться Protractor.
После установки соответствующих модулей для node.js для запуска selenium сервера используется команда webdriver-manager start.
Затем выполняется настройка конфигурационного файла protractor, где помимо прочего указываются тестовые скрипты, после чего запускается собственно protractor.

Webstorm

Весьма удобный инструмент для веб-разрабтки от JetBrains.
Дает возможность подключения библиотек, в том числе и для тестирования.
Также дает удобную возможность отладки тестов.


Ниже список распространенных инструментов, используемых для тестирования:
  • node.js
  • Karma: Запускатор тестов от команды AngularJS.
  • Jasmine: Фреймворк тестирования.
  • Mocha: Фреймворк для тестирования.
  • Chai: Assertion библиотека которая интегрируется в Mocha, и дает доступ к подходу BDD и расширяет возможности Mocha
  • Chai-as-promised: Плагин для Chai, реально полезный при работе с функциями возвращающими promise. 
  • AngularMocks: Дает поддержку для инъекции и мока Angular сервисов в модульном тестировании.
  • Protractor: Инструмент функционального тестирования для AngularJS, который запускает ваше приложение в браузере и взаимодействует с ним через Selenium.
  • Sinon: Стаб(Stub) и Мок(Mock) библиотека. Используйте ее для создания заглушек зависимостей в ваших директивах и контроллерах, и проверяйте что был вызов функций с корректными аргументами.
  • Browserify: Позволяет легко подключать модули между файлами в проекте
  • Partialify: Позволяет подключать HTML шаблоны прямо в AngularJS директивы.
  • Lodash: Библиотека, расширяющая стандартный функционал JavaScript.