2012-01-15 1 views
0

나는 webkit을 사용하여 nodeunit으로 테스트하고있는 Coffeescript로 작성된 테스트에서 설정 한 전역 변수 ("세션"변수)에 액세스 할 수없는 것 같습니다. :Coffeescript, nodeunit 및 전역 변수

SRC/test.coffee

root = exports ? this 

this.test_exports = -> 
    console.log root.export 
    root.export 

테스트/test.coffee 출력

exports["test"] = (test) -> 
    exports.export = "test" 
    test.equal test_file.test_exports(), "test" 
    test.done() 

결과 :

test.coffee 
undefined 
✖ test 

AssertionError: undefined == 'test' 

테스트에서 전역에 액세스하려면 어떻게합니까?

+0

'b'-Flag로 컴파일 해보십시오. 이렇게하면 보안 폐쇄가 추가되지 않습니다. – TimWolla

+0

내 소스가 플래그로 컴파일됩니다 :'nice -n 19 coffee -o web/-b -c -w src /', -B를 Trevor Burnham의 연속적인 Cakefile build = (watch, callback)에 추가했습니다 -> \t 대해서 typeof 시계 '기능' \t \t 콜백 인 경우 = = false를 \t \t 시계를 볼 \t 옵션 = [ '-b', '-c', '-o', 'LIB', 'SRC'] \t 옵션 을 보지만 주사위가없는 경우 .unshift '-w'. –

+0

글로벌 변수를 사용하지 않으시겠습니까? – Raynos

답변

0

"전역"개체를 사용하여 전역 상태를 공유 할 수 있습니다.

one.coffee :

console.log "At the top of one.coffee, global.one is", global.one 
global.one = "set by one.coffee" 

two.coffee :

console.log "At the top of two.coffee, global.one is", global.one 
global.two = "set by two.coffee" 

넣 3 모듈로부터 각각 (이 예에서는 대화식 세션)

$ coffee 
coffee> require "./one"; require "./two" 
At the top of one.coffee, global.one is undefined 
At the top of two.coffee, global.one is set by one.coffee 
{} 
+0

"this"대신 "root"를 사용하도록 예제 코드를 수정했습니다 (이 코드가 사용자가 언급 한 특정 코드 인 경우). 아직도 사랑이 없습니다. 기본적으로, 나는 내 테스트에서 'exports'에 var를 첨부하면 동일한 노드 vm에있는 파일의 'exports'에서 액세스 할 수 있어야한다고 가정합니다. –

+0

그래,하지만 마법의 "수출"변수는 없어. 당신이 정의하지 않았기 때문에 정의되지 않았습니다. 루트 대 이것은 중요하지 않습니다. –

+0

"내보내기"에는 마법이 없지만 "foo", "bar", "monkey"또는 "cheetah"는 맞지 않습니다.간단히 말하면 : 노드의 파일간에 데이터를 공유하는 방법은 무엇입니까? –

1

가짜 만들기 window 노드에 대해 내 보낸 전역 :

SRC/window.coffee

exports["window"] = {} 

SRC/test.coffee

test_file = require "../web/test" 
window = require "../web/window'" 

exports["test"] = (test) -> 
    window.export = "test" 
    test.equal test_file.test_exports(), "test" 
    test.done() 

매우 우아하지

if typeof(exports) == "object" 
    window = require('../web/window') 

this.test_exports = -> 
    console.log window.export 
    window.export 

테스트/test.coffee하지만 작동합니다.