Стажер в командной строке находит nodemailer, но не модуль, необходимый для него

Я режу зубы со стажером и нахожу это довольно трудным. Я упростил мою ситуацию до одного interntest папка с базовым package.json и одним модулем, содержащая мой intern.js и тестовый модуль.

interntest/
    package.json
    src/
        mymodule/
            test/
                intern.js
                MyTest.js

В моем package.json перечислены основные зависимости, которые мне нужны для запуска узла в этом каталоге:

{
  "name": "interntest",
  "version": "1.0.0",
  "dependencies": {
    "intern": "1.3.2",
    "nedb": "~0.9.3",
    "nodemailer": "~0.5.14",
    "requirejs": "",
    "dojo": "1.9.2"
  }
}

npm install теперь получает эти зависимости.

Непосредственная проблема связана с nedb а также nodemailer модули, которые я пытаюсь использовать. Я думал, что могу просто объявить их в intern.js так:

loader: {
    // Packages that should be registered with the loader in each testing environment
    packages: [
        'node', 
        'nedb',
        'nodemailer',

И требуется в MyTest.js просто с:

define([
    'intern!tdd',
    'intern/chai!assert',
    'nedb',
    'nodemailer'
], function (test, assert, Datastore, nodemailer) {

Но похоже nedb не может быть загружен, несмотря на node_modules/nedb/package.json правильно указав main: 'index',

neek@alyssa:~/src/interntest$ ./node_modules/.bin/intern-client config=src/mymodule/test/intern suites=mymodule/test/MyTest
Defaulting to "console" reporter
Error: Failed to load module nedb/main from /home/neek/src/interntest/node_modules/nedb/main.js (parent: mymodule/test/MyTest)
    at /home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:742:12
    at fs.js:207:20
    at Object.oncomplete (fs.js:107:15)

Чтобы попытаться обойти это, я получаю это в MyTest.js:

define([
    'intern!tdd',
    'intern/chai!assert',
    'nedb/index',
    'nodemailer/lib/nodemailer'

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

neek@alyssa:~/src/interntest$ ./node_modules/.bin/intern-client config=src/mymodule/test/intern suites=mymodule/test/MyTest
Defaulting to "console" reporter
Error: Attempt to require unloaded module lib/datastore
    at contextRequire (/home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:255:12)
    at req (/home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:30:10)
    at /home/neek/src/interntest/node_modules/nedb/index.js:7:17
    at Function.vm.runInThisContext (/home/neek/src/interntest/node_modules/intern/node_modules/istanbul/lib/hook.js:163:16)
    at /home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:745:8
    at fs.js:266:14
    at Object.oncomplete (fs.js:107:15)

Итак, после нахождения nedb/index.jsтеперь он не может найти относительный путь, указанный в этом файле, require('./lib/datastore'),

Ясно, что у меня есть кое-что запутанное. Может кто-нибудь посоветовать, пожалуйста?

1 ответ

Спасибо, Кен, кажется, мне это нужно в моем MyTest.js:

define([
    'intern!tdd',
    'intern/dojo/node!nedb',
    'intern/dojo/node!nodemailer',
    'intern/chai!assert',

очевидно, потому что nedb и nodemailer не являются AMD, они являются CommonJS (?), поэтому вы должны использовать inter/dojo/node! плагин для загрузки их в моем контексте AMD.

Это производит рабочий тест.

Для других людей, изучающих это, при создании очень простого моего модуля AMD это может потребоваться как обычно. SRC / MyModule/Helper.js:

define([], function () {

    return {
        doSomething: function () {
            console.log('Helper did something.');
        }
    }
});

И MyTest.js:

define([
    'intern!tdd',
    'intern/chai!assert',
    'intern/dojo/node!nedb',
    'intern/dojo/node!nodemailer',
    '../Helper'
], function (test, assert, Datastore, nodemailer, Helper) {

    console.log('Great, test module was loaded');

    Helper.doSomething();
});

Так что помощник может потребоваться просто как mymodule/Helper или же ../Helper (относительно MyTest.js).

Другие вопросы по тегам