Mocha / Chai тестирует надстройку Office, но Mocha продолжает утверждать, что «Office» не определен? - PullRequest
0 голосов
/ 27 ноября 2018

Я новичок в mocha / chai / testing в целом, так что извините, если это глупый вопрос, но я не могу понять, как это исправить.

Мой код (добавление Word-in) прекрасно работает сам по себе, но когда я пытаюсь запустить на нем тесты мокко, он достигает этой функции инициализации через несколько строк:

Office.initialize = (reason) => {
    $('#sideload-msg').hide();
    $('#app-body').show();
};

и просто останавливается, выплевывая эту ошибку:

ReferenceError: Office is not defined

Раньше он выплевывал то же самое, но для XMLHttpRequest (ReferenceError: XMLHttpRequest is not defined), но мне удалось обойти это, добавив это в верхнюю часть страницы:

const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

Я попытался бы попытаться сделать то же самое для Office, но я даже не уверен, что мне нужно require, и я не могу найти какую-либо информацию в Интернете.

Это полнота моей страницы test.js, если она помогает:

const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../src/index.js');
const should = chai.should();

const APIURL = "https://example.com";

chai.use(chaiHttp);

describe('API Calls', function() {
    it('should return 200 status code on /api/context-key GET', function (done) {
        chai.request(server)
            .get(APIURL + '/api/context-key')
            .end(function (err, res) {
                res.should.have.status(200);
                done();
            })
    });
});

Я даже не уверен, что правильно структурирую?Он использует страницу index.js моей надстройки как server, но я пытаюсь проверить, что API с URL https://example.com/api/context-key возвращает код состояния 200 при отправке запроса GET.Я далеко?Как я уже сказал, я совершенно новичок в тестировании: /

РЕДАКТИРОВАТЬ: На самом деле это исправление XMLHttpRequest заставило тесты запускаться, но сломало приложение.

1 Ответ

0 голосов
/ 14 декабря 2018

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

То, что вы пытаетесь сделать с помощью ваших тестов Мокко, выглядит как e2e-тестирование .

Но вы не настроили его так, чтобы проводить e2e-тестирование.Судя по коду, который я вижу, вы тестируете серверные вызовы - это нормально.Но Office.js на стороне клиента, что означает, что для правильного тестирования его функциональности вам придется загрузить страницу (вероятно, в браузере без монитора) - и затем делать все, что вы хотите.

Таминструменты для этого, см. некоторые интересные прочтения ниже:

Даже в этом случае тестирование, связанное с Office.js, не будет легким, поскольку требует внешнего контекста изОфисная среда (например, клиенты Windows / Mac / Web).Так, например, что-то вроде Office.context.document.settings не будет работать по умолчанию, и вам придется внедрить другой скрипт-макет, чтобы убедиться, что методы, которые вы хотите вызвать, являются имитируемыми.

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

Для примера приведу только один файл, такой как officewrappers.js, который должен содержать ссылки на ваши методы Office.js.Там вы можете иметь,

/*
 This file and its methods are the only reference that you have
 to Office.context... in no where else you should directly invoke
 these methods but use the OfficeService methods. That way 
 you can mock the OfficeService and you're good to go!
 */
OfficeService.GetDocumentBody = function() {
    // Some office method
    Office.context.document.getBody....
}
...