如何涵盖javascript代码模式| |{}
我正在使用JSCover运行我的Jasmine SpecRunner,它检查以下类型的代码片段:如何涵盖javascript代码模式| |{},javascript,unit-testing,jasmine,code-coverage,Javascript,Unit Testing,Jasmine,Code Coverage,我正在使用JSCover运行我的Jasmine SpecRunner,它检查以下类型的代码片段: var MyRootObject = MyRootObject || {}; 我的目标是将覆盖率提高到100%,但我不确定如何最好地覆盖这种初始化MyRootObject的方法 此模式用于每个库javascript文件的开头,以确保加载文件的顺序不重要(并且其中的函数和变量是$.extend'ed) 基本上,问题是第一次也是唯一一次将此脚本加载到SpecRunner中时,它只运行此测试的一侧,而另
var MyRootObject = MyRootObject || {};
我的目标是将覆盖率提高到100%,但我不确定如何最好地覆盖这种初始化MyRootObject的方法
此模式用于每个库javascript文件的开头,以确保加载文件的顺序不重要(并且其中的函数和变量是$.extend'ed)
基本上,问题是第一次也是唯一一次将此脚本加载到SpecRunner中时,它只运行此测试的一侧,而另一条路径未经测试。仔细研究后,我找到了一个适合我的解决方案,当然,您的里程数可能会有所不同:
var MyRootObject = MyRootObject || {};
$.extend(true, MyRootObject, {...});
我已替换为:
var MyRootObject = $.extend(true, MyRootObject, {...});
在JQuery内部,如果目标(MyRootObject)为null或未定义,它会自动将函数内部的目标指定为{}。通过使用外部库(我已经在使用),我不再有一个不遵循的条件路径,因为这是委托给JQuery库的。我对这个问题感到困惑。您是否试图测试一段代码的性能,但想测试变量赋值的
或情况?如果是这样,为什么不直接设置var MyRootObject=false
然后var MyRootObject=MyRootObject | |{}
?虽然100%的覆盖率听起来不错,但覆盖像您的示例这样的内容是浪费时间和开发精力的。我也不认为有可能为此创建单元测试,除非您可以在单独的环境中执行此文件。如果可以,只需在运行脚本之前声明MyRootObject
未定义,并在运行脚本之后包含一个对象(可能带有某些键)。在我们的例子中,我们在一个javascript文件中声明了公共API,然后在另一个文件中声明,我们有一些支持函数,它们扩展了主MyRootObject,以提供本地函数来支持公共API(并执行grunt工作)。由于这些多个文件,它们声明了var MyRootObject=MyRootObject | |{}
,因此在野外,脚本顺序无关紧要。我不想动态地修改SpecRunner.html或拥有多个版本的SpecRunner.html,我想介绍这一行。我在下面发布了我的问题的解决方案,这意味着对主代码进行了轻微的重写。