【发布时间】:2014-01-12 22:28:26
【问题描述】:
我正在使用 JSCover 运行我的 Jasmine SpecRunner,它检查以下代码片段:
var MyRootObject = MyRootObject || {};
我的目标是将覆盖率提高到 100%,但我不确定如何最好地覆盖这种初始化 MyRootObject 的方法。
此模式用于每个库 javascript 文件的开头,以确保文件加载的顺序不重要(并且其中的函数和变量是 $.extend'ed)。
问题基本上是该脚本第一次也是唯一一次加载到 SpecRunner 中,它只运行该测试的一侧,而另一条路径未测试。
【问题讨论】:
-
我对这个问题感到困惑。您是否正在尝试测试一段代码的性能,但想测试变量赋值的
or情况?如果是这样,为什么不设置var MyRootObject = false;然后var MyRootObject = MyRootObject || {}? -
虽然 100% 的覆盖率听起来不错,但覆盖像您的示例这样的东西是浪费时间和开发工作。我也认为根本不可能为此创建单元测试,除非您可以在单独的环境中执行此文件。如果可以的话,只需在运行脚本之前断言
MyRootObject是未定义的,并在之后包含一个可能带有某些键的对象。 -
在我们的例子中,我们在一个 javascript 文件中声明了公共 API,然后在另一个文件中,我们有扩展主 MyRootObject 以提供本地函数来支持公共 API 的支持函数(以及做繁重的工作)。由于这些多个文件,它们声明了
var MyRootObject = MyRootObject || {},因此在野外,脚本顺序无关紧要。不想动态更改 SpecRunner.html 或拥有多个版本的 SpecRunner.html,我想涵盖这一行。我在下面发布了我的问题的解决方案,这意味着对主要代码进行了轻微的重写。
标签: javascript unit-testing jasmine code-coverage