2014-03-28 12 views
2

requirejs 및 context 구성을 사용할 때 실패하는 간단한 모카 테스트가 있습니다.요구 사항 모카 컨텍스트 오류

여기 여기 A.js

define([], function(){ 
    return {}; 
}); 

있어 시험을의 spec.js

var requirejs = require('requirejs'); 

var localReq = requirejs.config({ 
    baseUrl: "./", 
    context: "context1" 
}) 

describe("context test", function() { 
    it("should not throw error", function() { 
     for (var i = 0; i < 100; i++) { 
      console.log(localReq("A"), i); 
     } 
    }); 
});  

내가 테스트 mocha spec.js을 실행할 때, 나는 다음과 같은 오류 얻을 :

catch되지 않은 오류 : 시도로드 "A"에서를 /Users/khirakawa/work/test/node_modules/mocha/bin/A.js 그런 다음 노드의 require ("A")를 시도했는데 오류로 인해 실패했습니다. 오류 : mo 찾을 수 없음 dule 'A'여기

는 스크린 샷입니다 :

fail

A가 제대로로드 100 회를 기록, 아직 테스트가 계속 실패했습니다 방법을 알 수 있습니다. 내가 context 설정을 주석 처리하면 정상적으로 작동합니다.

모카는 단 하나의 테스트 만 있지만 '1 회 통과'및 '1 회 실패'를 인쇄합니다.

왜 이런 일이 발생합니까? 모듈 동기 should work를 얻을 수 localReq를 호출, 당신은 코멘트에서 지적

describe("context test", function() { 
    it("should not throw error", function (done) { 
     localReq(["A"], function (f) { done(); }); 
    }); 
}); 

하지만 일부 설명 할 수없는 이유로하지 않습니다 :

답변

0

이 같은 테스트를 작성할 수 있습니다. 위의 코드는 localReq을 호출하여 모듈을 비동기 적으로로드합니다.

모카 (Mocha)가 귀하의 단일 검사가 통과하고 실패했다는 이유는 검사가 끝난 후에 발생하는 오류를 탐지하고이를 연관시키는 다른 검사가 없다는 것입니다. 같은 테스트가 통과하고 실패하는 오류 메시지의 이러한 종류의 오류 메시지는 비동기 적으로 발생하는 것이 있지만 Mocha 테스트 설정에서 처리하지 않았 음을 나타내는 확실한 증거입니다.

+0

감사합니다. 루이! 귀하의 설명은 브라우저 관점에서 의미가 있습니다. 노드 랜드에서 이해할 수없는 부분은 다음과 같습니다. 1) requirejs의 문서 상태는 "... 노드에서 실행될 때 모듈 로딩은 동기화 IO 호출을 사용하여로드되며 로더 플러그인은로드 메소드에 대한 호출을 동기식으로 해결해야합니다." 모듈을 먼저로드해야하는 곳은 어디에도 없습니다. 2) "_"의 기본 컨텍스트를 사용하면 내 테스트 사례가 작동하고 3) A에서 반환 된 내용을 {test : "test"}로 변경하면 {test : "test"}가 100 번 인쇄됩니다 , 동 기적으로로드되었음을 나타냅니다. –

+0

'require ("A")'가 실패한 이유에 대한 나의 설명이 목표가 아닙니다. 그러나 실제로 RequireJS *가하는 것은 문서와 일치하지 않습니다. 그렇지 않으면 코드가 작동합니다. 이 시점에서, 그것은 나에게 버그처럼 보입니다. – Louis

+0

감사합니다 루이, 여기 티켓을 열었습니다. https://github.com/jrburke/r.js/issues/662 –