Стажер в командной строке находит 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).