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