0

我正在plovr为使用 Google Closure 库的 JavaScript 代码运行单元测试。在我需要运行一些异步测试之前,我的设置工作正常。我从这个讨论中发现我需要org.plovr.test.soy使用 plovr 的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"
}

当我的配置中没有测试模板时,我的外部加载正常,但我的单元测试使用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

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

4

1 回答 1

0

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

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

这可能不是解决此问题的“正确”方法,但它可以完成工作。

于 2014-06-25T04:58:30.553 回答