2017-08-17 42 views
-1

我想添加单元测试这一功能:我们如何添加单元测试的JavaScript hasOwnProperty()函数

var advance = function (des, source) { 
     for (var p in source) { 
      if (source.hasOwnProperty(p)) { 
       des[p] = source[p]; 
      } 
     } 
     return des; 
}; 

我们如何检查茉莉花hasOwnProperty()方法?

编辑: 可能的解决方法

var des; 
var source; 
beforeEach(function() { 
    des = {}; 
    source = { 
     p: 'value', 
     p1: 'value1' 
    }; 
}); 

beforeAll(function() { 
    advance(des, source); 
}); 

it('should has a property with the name of the argument', function() { 
    expect(source).toEqual(jasmine.objectContaining({ 
     p: 'value' 
    })); 
    expect(source).not.toEqual(jasmine.objectContaining({ 
     p2: 'value2' 
    })); 
}); 

一个人,请提出更好的解决方案。

+0

更好的解决方案是什么?你目前的单元测试是什么? –

+0

而且不做交叉标记。 Java!= JavaScript! – GhostCat

+0

什么_better_解决方案?你没有提供你自己的尝试。 –

回答

2

hasOwnProperty()如果指定的属性名称只是对象本身的一部分,而不是原型链,则返回true。

因此,你可以通过对样机这样创建一个属性“模拟”这样一个对象:

function Foo() { 
    // own properties of "src" 
    this.a = 1; 
    this.b = 2; 
} 
// not own property of "src" 
Foo.prototype.c = 1; 
src = new Foo(); 

你的测试可能是这样的:

describe("hasOwnProperty", function() { 
    var dest, src; 

    beforeEach(function() { 
     dest = { }; 

     function Foo() { 
      this.a = 1; 
      this.b = 2; 
     } 
     Foo.prototype.c = 3; 
     src = new Foo(); 

     advance(dest, src); 
    }); 

    it("should not pick non-own properties", function() { 
     expect(dest.c).not.toBeDefined(); 
    }); 

    it("should pick own property", function() { 
     expect(dest.a).toBe(1); 
     expect(dest.b).toBe(2); 
    }); 
}); 

这将失败的测试:

function Foo() { 
    this.a = 1; 
    this.b = 2; 
    // Own property - spec demands this to be undefined 
    this.c = 3; 
} 
// Defined (above) as own property instead 
// Foo.prototype.c = 3; 
src = new Foo(); 
+0

感谢您的好解释:) – supun94

相关问题