var a, b = [];
a = false;
[
var1: a,
arrayVal: b
].forEach(function (scenario) {
scenario.var1 = true;
scenario.arrayVal.push("1", "2");
});
it("results", function () {
expect(a).toBe(true);// 1st test
expect(b).toEqual(["1", "2"]); // 2nd test
});
在上面的代码中, 第二次测试成功, 第一次测试失败,说“预期错误是真的”
有什么建议吗?
答案 0 :(得分:0)
首先,您的代码中存在错误。您通过为var1和arrayVal赋值来处理类似对象的数组。 foreach语句应如下所示:
[{
var1: a,
arrayVal: b
}].forEach(function (scenario) {
scenario.var1 = true;
scenario.arrayVal.push("1", "2");
});
关于你的第一次测试失败的原因,这是因为你要更换' a'的整个价值和参考,而使用' arrayVal'您通过将值推入数组来操纵当前值。这是一个代码示例:
var a = [true];
var var1;
//expecting... a: [true], var1: undefined
console.log('a: ' + a + ' var1: ' + var1);
var1 = a;
//expecting... a: [true], var1: [true]
console.log('a: ' + a + ' var1: ' + var1);
//manipulating the reference of a affects var1
a.push([false]);
//expecting... a: [true, false], var1: [true, false]
console.log('a: ' + a + ' var1: ' + var1);
//replacing the value of a does not affect var1
a = [true];
//expecting... a: [true], var1: [true, false]
console.log('a: ' + a + ' var1: ' + var1);
另请注意,布尔值是主要(原始)数据类型,您无法引用2个属性中的值。数组和对象是复合数据类型,这意味着多个属性可以引用一个值。