JINT - Unable to "console.log"

本文关键字:quot console log Unable JINT to | 更新日期: 2023-09-27 18:04:08

我是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);
        }
    }
}

它不起作用,我得到这个错误,这对我来说完全没有意义,我找不到任何文档。

Jint.Runtime。JavaScriptExceptionconsole没有定义Jint.Engine。执行(程序程序)Jint.Engine。执行(字符串源)SampleProject.Installers.Instanced.__testing_installer.can_use_jint_engine ()在_testing_installer.cs中:行318

有谁能帮我解释一下吗?我现在很困惑

JINT - Unable to "console.log"

在JavaScript中有三个我们关心的实体。主机(浏览器,应用程序等),引擎(JINT)和脚本(" console.log(...) ")。

JavaScript定义了一堆函数和对象作为语言的一部分,但控制台不是其中之一。按照惯例,浏览器定义了一个控制台对象,该对象可以按照您描述的方式使用。但是,由于您的应用程序不是浏览器(JINT本身不会这样做),因此在您的命名空间(globals)中没有定义控制台对象。

你需要做的是添加一个可以在JINT中访问的console对象。你可以在文档中找到如何做到这一点,但这里有一个简单的例子,如何将log 函数添加到引擎中,以便可以从JS代码中使用它(示例取自github)。

var engine = new Engine()
        .SetValue("log", new Action<object>(Console.WriteLine))
        ;
    engine.Execute(@"
      function hello() { 
        log('Hello World');
      };
      hello();
    ");