使用test-template选项时,不会加载Plovr externs

时间:2014-06-23 17:30:54

标签: javascript google-closure plovr

我正在使用plovr为使用Google Closure Library的JavaScript代码运行单元测试。我的设置工作正常,直到我需要运行一些异步测试。我从this discussion发现我需要使用plovr' org.plovr.test.soy选项替换默认的test-template文件。

我更新了test.soy文件,因此我可以使用goog.testing.ContinuationTestCase

<body>
  <script src="{$baseJsUrl}"></script>

  //This script tag was added.
  <script>
    goog.require('goog.testing.jsunit');
    goog.require('goog.testing.ContinuationTestCase');
  </script>

  <script src="{$testJsUrl}"></script>
</body>

现在我的单元测试使用ContinuationTestCase工作,但是出现了一个不同的意外问题。我的外星人没有被装上!请参阅下面的plovr配置:

{
  "id": "peders-app",
  "inputs": "src/peder/application.js",
  "paths": "src/peder",
  "output-file": "compiled.js",
  "externs": "src/peder/kinetic-externs.js",
  "test-template":"test/org.plovr.test.soy"
}

当我的配置中没有 test-template 时,我的externs加载正常,但使用ContinuationTestCase的单元测试失败。

当我添加 test-template 选项时,我的单元使用ContinuationTestCase传递测试,但许多其他测试失败,因为没有加载外部。

以下是让我相信外部人员无法正常工作的错误:

12:25:39.398  Start
12:25:39.400  testAddLine : PASSED
12:25:39.402  testCreateUndoCommand : PASSED
12:25:39.403  testUpdateLocalData : PASSED
12:25:39.404  testUpdateServerData : PASSED
12:25:39.404  Done

JS ERROR: Uncaught ReferenceError: Kinetic is not defined
URL: http://localhost:9810/input/peders-app/src/peder/smartPoint.js
Line: 143
JS ERROR: Uncaught TypeError: Cannot read property 'prototype' of undefined
URL: http://localhost:9810/input/peders-app/src/peder/modifyLine.js
Line: 24
JS ERROR: Uncaught ReferenceError: Kinetic is not defined
URL: http://localhost:9810/input/peders-app/src/peder/shapes/line.js
Line: 154

有谁知道为什么使用自定义测试模板会阻止我的外部加载?

1 个答案:

答案 0 :(得分:0)

事实证明,出于某种原因运行测试时,外部人员从未被加载。来自外部函数的错误被调用的错误并不会导致测试失败。我仍然不知道为什么使用test-template选项导致错误无法通过测试,但幸运的是我找到了解决方法。

我只是将我的外部直接添加到plovr jar中。要执行此操作,只需将您的extern添加到plovr.jar中的externs文件夹中。然后更新plovr jar顶层的externs_manifest.txt以包含您添加的任何文件。这将使plovr将你的extern视为默认的extern。

这可能不是&#34;对&#34;解决这个问题的方法,但它完成了工作。