我是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(程序程序)at Jint.Engine.Execute(String source)at SampleProject.Installers.Instanced .__ testing_installer.can_use_jint_engine() 在_testing_installer.cs中:第318行
有人可以协助解决这个问题吗?我现在很困惑。
答案 0 :(得分:5)
使用JavaScript有三个实体 - 我们关心。在这种情况下,主机(浏览器,您的应用程序等),引擎(在本例中为JINT)和脚本(&#34; console.log(...)
&#34;)。
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();
");