寻找一个可用于Nashorn的jjs解释器的javascript单元测试套件。

4
Nashorn的jjs解释器可以执行许多复杂的任务,例如创建Web服务器、数据库操作以及Swing/JavaFX接口。这种方法的优点是快速实验和能够使用您能想到的任何Java库。
我正在纯JavaScript模式下使用Nashorn,即:
- 我只使用来自Nashorn的提供的jjs解释器。 - 我不从Java程序中调用Nashorn解释器。 - 我不使用avatarjs或nodejs等叠加层。
一切都很好。然而,我无法使标准JavaScript单元测试套件与Nashorn的jjs配合使用。
我查看了jasmine、qunit、mocha和许多其他框架,但没有有效的结果。我甚至尝试让Java JUnit在纯jjs脚本中工作。
其中许多都有我发现需要在Web客户端上运行的JS测试运行程序,这超出了我的范围。
我希望能够在纯JS模式下,而不是在Java模式下,使用Nashorn jjs解释器运行真正的不可知性JavaScript测试套件。
是否有这样的工具,如果有,如何在Nashorn的jjs中使用它?
更新:
根据Sirko的答案,我成功地使用以下两个代码片段模仿了预期的行为(警告:Nashorn的特定内容)
load("qunit-1.18.0.js");

with(QUnit) {
  init();
  log(function(d) {
    if (!d.result) {
      var message = d.name + "\tFAIL" + d.source;
      message += " actual: " + d.actual + " <> expected: " + d.expected;
      print(message);
    }
  });
  done(function(d) {
    print("time:\t",d.runtime,"ms");
    print("total:\t",d.total);
    print("passed:\t",d.passed);
    print("failed:\t",d.failed);
  });
}

qunit_poc.js:

load("qunit-nashorn.js");

with(QUnit) {
  test("test1", function(a) { a.equal(true,true); });
  test("test2", function(a) { a.equal(false,true); });
}

QUnit.load();

使用纯jjs运行这些代码的结果如下:

> jjs qunit_poc.js

test2   FAIL    at <anonymous> (qunit_poc.js:5) actual: false <> expected: true
time:    355 ms
total:   2
passed:  1
failed:  1

在QUnit中,您可以为测试设置事件侦听器,因此以任何需要/想要的形式返回结果。在您的环境中应该可以运行此功能。 - Sirko
@sirko 您可以提供一个设置此类事件监听器的详细示例吗?我在使用qunit-1.18.0.js进行简单断言时没有看到任何结果。 - Christian MICHON
@downvoter:您能否解释一下为什么您认为这个问题与测试和编程无关,导致您对它进行了负评? - Christian MICHON
1个回答

1
这是我的一段代码摘录,我曾在一段时间内使用它来使QUnit从测试运行中返回自定义输出:
QUnit.init();

// (failed) tests
QUnit.log( function(details) {} );

// module start
QUnit.moduleStart( function( details ){} );

// module summary
QUnit.moduleDone( function( details ){} );

// test begin
QUnit.testStart( function( details ){} );

// test end
QUnit.testDone( function( details ){} );

// finished all testing
QUnit.done( function(){} );

使用这些函数/回调/事件监听器,我设置了自定义的QUnit测试输出。实际测试是这样添加的:

// start module
QUnit.module( 'myModuleName' );

// some tests
QUnit.test( 'some test', function( assert ) { } );

// execute
QUnit.load();

这段代码比较老,所以QUnit可能会提供更简单的方法来实现这个功能,但是这对我曾经起作用。


我通过逆向工程解决了大部分问题,但我缺少QUnit.load()... 在我标记此问题已解决之前,我需要进行更多测试。感谢第一个答案。 - Christian MICHON
太棒了!我成功让它工作了。非常感谢,当然接受你的答案! - Christian MICHON

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接