angularjs中jasmine单元测试中的问题
在上述代码中, 第二次测试成功, 第一次测试失败,说“预期错误为真”angularjs中jasmine单元测试中的问题,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,在上述代码中, 第二次测试成功, 第一次测试失败,说“预期错误为真” 有什么建议吗?首先,您的代码中有一个错误。通过将值赋给var1和arrayVal,可以将数组视为对象。foreach语句应该如下所示: var a, b = []; a = false; [ var1: a, arrayVal: b ].forEach(function (scenario) { scenario.var1 = true; scenario.arrayVal.push("1", "2"); });
有什么建议吗?首先,您的代码中有一个错误。通过将值赋给var1和arrayVal,可以将数组视为对象。foreach语句应该如下所示:
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
});
关于第一次测试失败的原因,这是因为您正在替换“a”的整个值和引用,而使用“arrayVal”则通过将值推入数组来操纵当前值。下面是一个代码示例:
[{
var1: a,
arrayVal: b
}].forEach(function (scenario) {
scenario.var1 = true;
scenario.arrayVal.push("1", "2");
});
还要注意布尔值是主要(基本)数据类型,不能引用两个属性中的值。数组和对象是复合数据类型,这意味着多个属性可以引用一个值。谢谢Andrew,但我不想将“a”声明为数组/对象,它应该声明为变量/布尔值。那么您就有点麻烦了。你想通过这次考试达到什么目的?
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);