在angularjs中的茉莉花单元测试中的问题

时间:2014-07-24 23:24:02

标签: angularjs unit-testing jasmine

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

在上面的代码中, 第二次测试成功, 第一次测试失败,说“预期错误是真的”

有什么建议吗?

1 个答案:

答案 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个属性中的值。数组和对象是复合数据类型,这意味着多个属性可以引用一个值。