我正在使用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
有谁知道为什么使用自定义测试模板会阻止我的外部加载?
答案 0 :(得分:0)
事实证明,出于某种原因运行测试时,外部人员从未被加载。来自外部函数的错误被调用的错误并不会导致测试失败。我仍然不知道为什么使用test-template
选项导致错误无法通过测试,但幸运的是我找到了解决方法。
我只是将我的外部直接添加到plovr jar中。要执行此操作,只需将您的extern添加到plovr.jar中的externs
文件夹中。然后更新plovr jar顶层的externs_manifest.txt以包含您添加的任何文件。这将使plovr将你的extern视为默认的extern。
这可能不是&#34;对&#34;解决这个问题的方法,但它完成了工作。