JINT-无法“ console.log”

Cie*_*iel 0 c# jint

我是的新手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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

而且它不起作用,我收到此错误,这对我来说绝对没有意义,而且我也找不到任何文档。

未在_testing_installer.cs的SampleProject.Installers.Instanced .__ testing_installer.can_use_jint_engine()的Jint.Engine.Execute(字符串源)的Jint.Engine.Execute(程序程序)处定义Jint.Runtime.JavaScriptExceptionconsole:第318行

任何人都可以协助减轻一些压力吗?在这一点上我很困惑。

Sha*_*ish 5

使用JavaScript,我们需要三个实体。主机(浏览器,您的应用程序等),引擎(在这种情况下为JINT)和脚本(“ console.log(...)”)。

JavaScript将一堆函数和对象定义为语言的一部分,但控制台不是其中之一。按照约定,浏览器定义一个控制台对象,该对象可以按照您描述的方式使用。但是,由于您的应用程序不是浏览器(并且JINT本身并不执行此操作),因此在名称空间(全局变量)中没有定义任何控制台对象。

您需要做的是添加一个console将在JINT中访问的对象。您可以在文档中找到如何执行此操作,但这是一个如何向引擎添加日志函数的简单示例,以便可以从JS代码中使用它(示例取自github)。

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

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

      hello();
    ");
Run Code Online (Sandbox Code Playgroud)