Sup*_*miu 2 javascript code-coverage jasmine
我有一个代码实现,它遍历 anobject
的属性。
for (const prop in obj) {
propsMap[prop] = prop;
}
Run Code Online (Sandbox Code Playgroud)
但正如状态一样,我的 IDE (WebStorm) 建议我添加一个属性检查,obj.hasOwnProperty(prop)
以避免迭代不存在的属性:
for (const prop in obj) {
if (obj.hasOwnProperty(prop)) {
propsMap[prop] = prop;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当前的测试总是伴随着obj.hasOwnProperty(prop)
存在true
,并且覆盖率不是我能得到的最好的,我不知道如果obj
实际上没有属性会发生什么prop
。
要对此进行测试,您可以创建从其原型继承某些内容的对象
const obj = Object.create({name: 'inherited'})
Run Code Online (Sandbox Code Playgroud)
name
将伪造obj.hasOwnProperty('name')
检查。
但是有更好的选择来复制对象。例如Object.assign
Object.assign(propsMap, obj)
Run Code Online (Sandbox Code Playgroud)
您还应该记住,obj.hasOwnProperty
检查很容易出错。例如
const obj = {hasOwnProperty: null} // hasOwnProperty is not a function
const obj = Object.create(null) // obj wont inherit hasOwnProperty
Run Code Online (Sandbox Code Playgroud)
所以至少将其替换为
const hasOwnProperty = {}.hasOwnProperty
for(const name in obj) {
if(hasOwnProperty.call(obj, name)) {
}
Run Code Online (Sandbox Code Playgroud)