Как импортировать внешнюю библиотеку с помощью внутреннего js?

Я работаю над автоматизацией пользовательского интерфейса веб-приложения, используя internjs, и я m пытаюсь напрямую выгрузить отчет о тестировании для функционального теста в файл excel. Что я хочу сделать, так это:

  1. Создать тестовый отчет функционального теста в файле Excel
  2. Сделайте снимок экрана, если тест не пройден или пропущен.
  3. Сожмите (архивируйте) отчет Excel и снимок экрана в один zip-файл.

Для этого мне нужно установить стороннюю библиотеку archiver.

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

Я установил архиватор с помощью следующей команды: npm install archiver --save

Мой код выглядит следующим образом:

 define([
    'intern/dojo/node!fs',
     '../TestUtils/ExcelUtil',
     '../TestUtils/SnapShotUtil',
     'archiver'  //<= import archiver
 ], function (fs, ExcelUtil, SnapShotUtil, archiver) {
    var Excel = ExcelUtil.instance();
    var screenshotDir = 'test-reports/screenshot/';
    function TestReporter(config) {
    config = config || {};
}
TestReporter.prototype = {

    suiteError: function (suite) {
        SnapShotUtil.takeSnapShot(suite, suite.name + '-' + suite.error.name)
    },
    testPass: function (test) {
        Excel.addRow([test.parent.name, test.name, 'N/A', 'Pass', 'N/A'])
    },
    testSkip: function (test) {
        var picName = screenshotDir + test.parent.name.replace(/ /g, '') + '-' +
            test.name.replace(/ /g, '') + '.png'
        Excel.addRow([test.parent.name, test.name, 'N/A', 'Skipped', '=HYPERLINK(' + picName + ',ScreenShot)'])
        SnapShotUtil.takeSnapShot(test, picName)

    },

    testFail: function (test) {
        var picName = screenshotDir + test.parent.name.replace(/ /g, '') + '-' +
            test.name.replace(/ /g, '') + '-' + test.error.name + '.png'
        Excel.addRow([test.parent.name, test.name, test.error.name, 'Failed', '=HYPERLINK(' + picName + ',ScreenShot)'])
        SnapShotUtil.takeSnapShot(test, picName)

    }
};
return TestReporter;

});

Но я получаю следующую ошибку:

  Error: Failed to load module archiver from 
  D:/Users/sshrestha/Documents/APps/newAuto/advtestautomation/archiver.js 
(parent: Automation/ConfigFiles/TestReporter.js)
  at ReadFileContext.callback  <node_modules\intern\node_modules\dojo\loader.ts:831:119>
  at FSReqWrap.readFileAfterOpen [as oncomplete]  <fs.js:303:13>

И моя структура папок выглядит следующим образом

введите здесь описание изображения

Может кто-нибудь, пожалуйста, помогите.


person CodeBlooded    schedule 30.08.2017    source источник


Ответы (1)


архиватор распространяется в виде модулей CommonJS, поэтому вам нужно будет импортировать его с помощью плагина dojo/node (так же, как вы делаете с «fs»):

intern/dojo/node!archiver 
person jason0x43    schedule 02.10.2017
comment
Вы имеете в виду, что нам не нужно устанавливать архиватор отдельно? - person CodeBlooded; 31.10.2017
comment
Вам все равно нужно установить архиватор. Проблема с форматом модулей JS в пакете архиватора. Команда define([ 'archiver' ], ...) попытается загрузить архиватор как модуль AMD. Однако модули архиватора используют формат CommonJS, поэтому их нужно загружать с помощью плагина-загрузчика, например define([ 'intern/dojo/node!archiver' ], ...). - person jason0x43; 31.10.2017