我有一个简短的函数,可以获取一个数组并随机播放值""。
array_name.sort(function() { return 0.5 - Math.random() });
我如何测试我之前得到的阵列不同?
当然我可以模拟数组,然后测试是否
array_name[2] != array_after[2];
但是,随着它的随机性,有时候这个位置是平等的,有时候不是。
对此有什么好处?
所以,关于测试随机性
我有办法,当然还有我的问题:
it('different option order when randomization is true', function() {
var array = // getting from json.file here
var array_after = question.shuffle(array);
expect(array[4].text.localeCompare(array_after[1].text)).toBe(0);
});
当然,我现在不能说这总是不同的。因为我多次运行我的测试,有时它们是相同的,有时候不是......
答案 0 :(得分:3)
您所追求的是种子随机数生成器。在您的测试中,您可以控制种子并验证不同的种子始终生成不同的数字。
有关详细信息,请参阅http://indiegamr.com/generate-repeatable-random-numbers-in-js/。
相关问题:
答案 1 :(得分:-1)
如果需要比较前后阵列是否确实不同,请执行以下操作:
function arraysAreEqual(before, after){
if(before.length !== after.length){
return false;
}
for(var i = 0; i < before.length; i++){
if(before[i] !== after[i]){
return false;
}
}
return true;
}
根据数组的内容,您可能需要修改for
循环中的相等性检查以考虑嵌套数组/对象。
假设:
var myArray = [
{text: 'foo', value: 1},
{text: 'bar', value: 2}
]
您可以使用此功能,例如:
if(before[i].text !== after[i].text ||
before[i].value !== after[i].value){
return false;
}
使用此功能,您应该可以使用:
expect(arraysAreEqual(array, array_after)).toBe(false);
但是,测试用例将在(不可能的,但可能的)情况下失败,随机数发生器返回与输入相同的数组。