gpt4 book ai didi

javascript - 我们如何为 Javascript hasOwnProperty() 函数添加单元测试

转载 作者:行者123 更新时间:2023-11-28 12:17:30 25 4
gpt4 key购买 nike

我正在尝试为此函数添加单元测试:

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

我们如何检查 Jasmine 中的 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'
}));
});

有人请提出更好的解决方案。

最佳答案

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

因此,您可以通过在原型(prototype)上创建属性来“模拟”这样的对象,如下所示:

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();

关于javascript - 我们如何为 Javascript hasOwnProperty() 函数添加单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45726736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com