2013-12-14 1 views
0

저는 인턴으로 내 이빨을 절단하고 있고 힘들어하고 있습니다. 필자는 기본 package.json과 intern.js 및 테스트 모듈이 포함 된 단일 모듈을 사용하여 상황을 단일 interntest 폴더로 단순화했습니다.인턴이 명령 줄에서 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) { 

그러나 올바르게 지정 node_modules/nedb/package.json에도 불구하고, nedb를로드 할 수없는 것 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-Internals에서 "비 AMD 코드 테스트"섹션을 보았습니까? –

답변

1

감사 켄, 내가 내 MyTest.js이 필요 보인다

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

는 AMD, 그들은 CommonJS 있습니다하지 nedb 및 nodemailer이되어 분명히 있기 때문에, 그래서 당신은로드 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에 비해)로 간단하게 요구 될 수 있습니다.

관련 문제