我是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);
}
}
}它不起作用,我得到了这个错误,这对我来说是完全没有意义的,而且我找不到任何文档。
在SampleProject.Installers.Instanced.__testing_installer.can_use_jint_engine()的Jint.Engine.Execute(程序扩展程序)的Jint.Engine.Execute(String#en0#)上没有定义_testing_installer.cs:第318行
有人能帮忙澄清这件事吗?在这点上我很困惑。
发布于 2014-05-20 12:56:07
对于JavaScript,有三个实体--我们关心的是。在本例中,主机(浏览器、应用程序等)、引擎(本例中为JINT)和脚本("console.log(...)")。
JavaScript将一组函数和对象定义为语言的一部分,但控制台不是其中之一。按照惯例,浏览器定义一个控制台对象,该对象可以以您描述的方式使用。但是,由于您的应用程序不是浏览器( JINT本身不会这样做),所以您的命名空间(globals)中没有定义控制台对象。
您需要做的是添加一个在JINT中可以访问的console对象。您可以在文档中找到如何做到这一点,但这里有一个简单的示例,说明如何将日志函数添加到引擎中,以便可以从JS代码中使用它(示例取自github)。
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine))
;
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");https://stackoverflow.com/questions/23759448
复制相似问题