0

私はに慣れJINTていないので、いくつかの基本的なテストを行って、ロープを学習しようとしています。私の最初の試みは、JavaScript をデータベースに保存してロードし、単体テストで実行することでした。つまり、本質的にはこのように見えます....

[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);
        }
    }
}

そして、それは機能しません。このエラーが表示されますが、これはまったく意味がありません。ドキュメントが見つかりません。

_testing_installer.cs の SampleProject.Installers.Instanced.__testing_installer.can_use_jint_engine() の Jint.Engine.Execute(String source) の Jint.Engine.Execute(Program program) に Jint.Runtime.JavaScriptExceptionconsole が定義されていません: 318 行目

これに光を当てるのを手伝ってくれる人はいますか?この時点でかなり混乱しています。

4

1 に答える 1

5

JavaScript には 3 つのエンティティがあります。ホスト (ブラウザー、アプリケーションなど)、エンジン (この場合は JINT)、およびこの場合のスクリプト (" console.log(...)")。

JavaScript は言語の一部として一連の関数とオブジェクトを定義しますが、コンソールはその 1 つではありません。慣例により、ブラウザは、説明した方法で使用できるコンソール オブジェクトを定義します。ただし、アプリはブラウザーではないため (そして JINT はそれ自体でこれを行うわけではありません)、名前空間 (グローバル) で定義されたコンソール オブジェクトはありません。

必要なことはconsole、JINT でアクセスできるオブジェクトを追加することです。これを行う方法はドキュメントで見つけることができますが、JS コードから使用できるようにログ関数をエンジンに追加する方法の簡単な例を次に示します (github から取得した例)。

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

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

      hello();
    ");
于 2014-05-20T12:56:07.850 に答える