2013-12-14 21 views
0

我在實習生中切齒,發現它很難。我已經簡單地將我的情況簡化爲帶有基本package.json和單個模塊的單個interntest文件夾,其中包含我的intern.js和測試模塊。命令行上的實習生髮現nodemailer,但不是它所需的模塊

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並立即抓取這些依賴關係。

直接問題是我試圖使用的nedbnodemailer模塊。我原以爲我可以簡單地宣佈他們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'

[email protected]:~/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至少會從這些文件在所有模塊。然而,這似乎是致命的缺陷:

[email protected]:~/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

您是否看到過https://github.com/theintern/intern/wiki/Writing-Tests-with-Intern上的「Testing Non-AMD Code」部分? –

回答

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)。

相關問題