寻找与Nashorn的jjs解释器一起使用的javascript单元测试套件

时间:2015-07-23 08:35:25

标签: javascript unit-testing nashorn

Nashorn的jjs解释器允许执行许多复杂的任务,如创建Web服务器,数据库操作和swing / javafx接口。这种方法的大多数好处是快速实验和使用您能想到的任何Java库的能力。

我在纯javascript模式下使用Nashorn,即:

  • 我只使用Nashorn提供的jjs解释器。
  • 我不是从Java程序中调用Nashorn解释器
  • 我没有使用avatarjs或nodejs等效叠加

一切都很好。然而,我无法使标准的javascript单元测试套件与Nashorn的jjs一起使用。

我看过jasmine,qunit,mocha和许多其他没有有效结果的框架。我甚至试图让java junit与纯jjs脚本一起工作。

其中许多都有js测试运行器,我发现请求在Web客户端上运行,这超出了我的范围。

我希望能够在纯js模式下使用Nashorn jjs解释器运行真正的不可知 javascript测试套件,而不是在java模式下运行。

是否有这样的工具,如果有的话怎么能和Nashorn的jjs一起使用?

更新

跟进Sirko的回答,我设法用这两个代码片段模仿了预期的行为(警告:Nashorn的具体内容)

qunit-nashorn.js:

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运行这些结果会产生以下结果:

  

&GT; 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

1 个答案:

答案 0 :(得分:1)

这是我的一些代码的摘录,我刚才用过QUnit从testruns返回自定义输出:

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可能会提供一种更简单的方法,但这曾经适用于我。