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

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

Jint.Runtime.JavaScriptExceptionconsole 未在 Jint.Engine.Execute(Program program) at Jint.Engine.Execute(String source) at SampleProject.Installers.Instanced.__testing_installer.can_use_jint_engine() in _testing_installer.cs 中定义:第 318 行

任何人都可以帮助阐明这一点吗?在这一点上我很困惑。

4

1 回答 1

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();
    ");
于 2014-05-20T12:56:07.850 回答