Как выполнить модульное тестирование кода приложения office.js?

Существуют ли какие-либо общие практики, фреймворки или шаблоны для модульного тестирования кода на основе office.js? Учитывая большое количество компонентов в объектной модели, имитировать вызовы office.js невозможно. Есть ли что-то вроде средства запуска кармы для запуска тестового кода в приложении панели задач тестового контейнера? Кто-нибудь разработал эффективный способ тестирования кода, взаимодействующего с office.js?


person Sameera    schedule 01.11.2016    source источник


Ответы (2)


Я думаю, вам следует выполнить модульное тестирование кода на основе Office.js так же, как и для «стандартного» кода javascript. Действительно, Office.js - это просто еще одна зависимость javascript, такая как JQuery и т. Д.

Конечно, вам не следует включать Office.js на тестовую страницу и заменять объект Office на макет. Вы можете ознакомиться с Sinon Js, фреймворком для имитации JavaScript.

Когда вы пишете модульный тест, вы изолируете фрагмент кода (класс или модуль), который называется тестируемой системой (SUT). Если вы основали свое дополнение на платформе одностраничных приложений, такой как Angular, SUT может быть контроллером. Затем вы можете внедрить объект Office как зависимость, в реальном контексте это будет настоящий Office из Office.js. В тесте это будет макет.

person Benoit Patra    schedule 01.11.2016
comment
Теоретически да, именно так мы и поступим. Однако, если вы возьмете, например, код на github.com/OfficeDev/office-js-docs/blob/master/docs/excel/ имитирование объектов Office в конечном итоге потребует чрезмерного объема работы. Придется имитировать книгу, лист, диапазон, диаграммы и все подобъекты. Так что издевательство не вариант. Подобно тому, как модульные тесты jquery не создают имитацию DOM, но выполняются на HTML-странице, я бы предположил, что тесты на основе Office.js необходимо запускать в приложении панели задач контейнера. - person Sameera; 02.11.2016
comment
@Sameera, если вы выполняете только модульный тест (без интеграционного тестирования), вам не нужно имитировать все, только методы / свойства Office, используемые вашей SUT. Это не должно быть большим объемом работы ... - person Benoit Patra; 02.11.2016
comment
@Sameera, я бы добавил к этому, что на самом деле я бы написал автономные функции, которые принимают ввод / вывод, и тестировал бы их, не говоря уже о Office.js. А затем у меня был бы еще один набор интеграционных тестов, которые выполняются внутри Excel и максимально приближены к взаимодействию с пользователем, по модулю управляемые программно, а не пользовательским интерфейсом. - person Michael Zlatkovsky - Microsoft; 12.11.2016
comment
@MichaelZlatkovsky Если вы возьмете пример кода, который я привел в первом комментарии, функция loadDataAndCreateChart, заполняющая заданный диапазон в активной таблице, создает диаграмму из этих данных и форматирует ее. Очевидно, это не лучшая практика, поскольку fn не придерживается принципа единой ответственности. Но такой код может быть довольно распространенным, учитывая, что более эффективно манипулировать прокси-объектами Office.js массово и синхронизировать их с Excel, чем делать несколько вызовов Excel после выполнения незначительных единиц работы (что можно было бы протестировать). Это неправильное восприятие? - person Sameera; 12.11.2016
comment
@Sameera, извините, похоже, эта тема соскользнула с моего радара. Если у вас все еще есть вопрос (и на самом деле, похоже, это другой вопрос, чем тестирование), не могли бы вы начать другой поток StackOverflow? - person Michael Zlatkovsky - Microsoft; 07.12.2016

Вот что я в итоге сделал:

  1. В решение добавлен новый проект приложения панели задач
  2. Включен автономный zip-архив Jasmine из https://github.com/jasmine/jasmine/releases
  3. Местоположение источника манифеста приложения TaskPane указывает на SpecRunner.html.
  4. Изменен boot.js, чтобы заменить выполнение тестовых спецификаций в window.load на выполнение в Office.initilize.
person Sameera    schedule 05.11.2016