2012-09-03 2 views
2

자바 스크립트 코드에서 단위 테스트를 수행하기 위해 jasmine-node를 사용하고 있습니다. 필자는 spyOn을 사용하고자하는 많은 전역 함수를 가지고 있으며 호출을 원래 구현으로 만들 수 있습니다. 아래 코드를 예제로보십시오.자스민 - 노드를 사용하여 전역 기능을 감시하다

설명 할 수없는 이유로 'globalFunction() 메서드가 존재하지 않습니다.'라는 오류가 표시됩니다.

jasmine이 글로벌 범위에있는 것으로 이해하는이 globalFunction 메소드를 찾을 수없는 이유를 누군가가 말해 줄 수 있습니까?

나는 여기에 자스민 노드의 출력

$ jasmine-node --verbose test.spec.js 
Runner Started. 
A Global Function : may be spied upon ... 
Failed. 
A Global Function: 0 of 1 passed. 

A Global Function 
    may be spied upon 

Failures: 

    1) may be spied upon 
    Message: 
    globalFunction() method does not exist 
    Stacktrace: 
    undefined 

Finished in 0.008 seconds 
1 test, 1 assertion, 1 failure 


Runner Finished. 
1 spec, 1 failure in 0.008s.  

답변

3

귀하의 globalFunction없는 사실 전역 도움

var globalFunction = function() { 
    console.log('globalFunction'); 
}; 

describe("A Global Function", function() { 
    jasmine.getEnv().addReporter(new jasmine.ConsoleReporter(console.log)); 
    it("may be spied upon", function() { 
     spyOn(global,'globalFunction').andCallThrough(); 
     globalFunction(); 
     expect(globalFunction).toHaveBeenCalled(); 
    }); 
}); 

에게 감사드립니다. 전역 화하려면 var 키워드를 제거하십시오. 브라우저에서

globalFunction = function() { 
    console.log('globalFunction'); 
}; 

는 최상위 범위는 전역 범위이다. 즉, 브라우저에서 전역 범위에 있다면 var 변수가 전역 변수를 정의합니다. Node에서는 이것이 다릅니다. 최상위 범위는 전역 범위가 아닙니다. var Node 모듈 내부의 내용은 해당 모듈에 대해 로컬입니다.

+0

안녕하세요, 왜 함수를 참조 할 수 없는지 설명합니다. 모듈의 로컬 범위를 참조하려면 어떻게해야합니까? – punkle

+0

내가 아는 한 로컬 모듈 범위에 대한 특별한 언급은 없습니다. –

+0

엄격 모드에서는 작동하지 않습니다. – Randy

관련 문제