2014-05-20 2 views
0

저는 JINT을 처음 사용하고 로프를 배우는 데 필요한 몇 가지 기본 테스트를 수행하려고합니다. 내 첫 번째 시도는 내 데이터베이스에 자바 스크립트를 저장하고로드 한 다음 단위 테스트에서 실행하는 것이 었습니다. 그래서 나는 나에게 전혀 의미가없는이 오류를 얻을, 나는에있는 모든 문서를 찾을 수없는, 그 .... 기본적으로 다음과 같이JINT - "console.log"에 연결할 수 없습니다

[Fact] 
public void can_use_jint_engine() { 
    using (var database = DocumentStore()) { 
     using (var session = database.OpenSession()) { 
      var source = session.Load<Statistic>("statistics/1"); 

      // join the list of strings into a single script 
      var script = String.Join("\n", source.Scripting); 

      // this will create the script 
      // console.log("this is a test from jint."); 
      // 
      var engine = new Jint.Engine(); 
      // attempt to execute the script 
      engine.Execute(script); 
     } 
    } 
} 

보이는 그리고 그것은 작동하지 않습니다.

Jint.Runtime.JavaScriptExceptionconsole이 SampleProject.Installers.Instanced .__ testing_installer.can_use_jint_engine에서 Jint.Engine.Execute (문자열 소스)에서 Jint.Engine.Execute (프로그램 프로그램)에 정의되지 않은() _testing_installer.cs : line 318

아무에게도이 문제에 대한 의견을 제시 할 수 있습니까? 나는이 시점에서 꽤 혼란 스럽다.

답변

4

JavaScript에는 세 가지 요소가 있습니다. 이 경우 호스트 (브라우저, 응용 프로그램 등), 엔진 (이 경우 JINT) 및 스크립트 ("console.log(...)").

JavaScript는 함수와 객체를 언어의 일부로 정의하지만 콘솔은 그 중 하나가 아닙니다. 일반적으로 브라우저는 사용자가 설명하는 방식으로 사용할 수있는 콘솔 객체를 정의합니다. 그러나 앱이 브라우저가 아니기 때문에 (JINT 자체로는이 작업을 수행하지 않습니다.) 네임 스페이스 (전역)에 콘솔 객체가 정의되어 있지 않습니다.

JINT에서 액세스 할 수있는 console 개체를 추가하면됩니다. 문서에서이 작업을 수행하는 방법을 찾을 수 있지만 여기에 로그 을 엔진에 추가하여 JS 코드 (github에서 가져온 예제)에서 사용할 수있는 간단한 예제가 있습니다.

var engine = new Engine() 
     .SetValue("log", new Action<object>(Console.WriteLine)) 
     ; 

    engine.Execute(@" 
     function hello() { 
     log('Hello World'); 
     }; 

     hello(); 
    "); 
+0

익명 함수 대신 'hello'라는 이름을 사용할 수 있습니까? 그렇다면 어떻게 달성 될까요? Like ...'function() {log ('Hello World'); }; - 할 수 있니? 또는 __have__ 모든 함수에 명시 적 이름을 부여합니까? – Ciel

+1

예제에있는 스크립트를 사용할 수 있습니다. 예를 들어 engine.Execute (@ " log ('Hello World'); "); –

+0

글쎄, 내 말은 - 데이터베이스에 전체 함수를 저장하고 싶지만 함수 대괄호로 묶어야한다는 것입니다.하지만 "name"은 디자인 타임에 알려지지 않을 것이므로 익명의 함수를 사용하고 싶습니다. . 그래서 나는 아직도 그것에 대해 혼란스러워하고 있습니다. – Ciel