【发布时间】:2018-04-24 22:10:16
【问题描述】:
我有一个方法,我在数组原型上放置了一个反转数组的方法(这样做仅用于学习目的)。此方法应将数组反转到位。
Array.prototype.yarra = function () {
for (let left=0, right=this.length-1; left<right; left++, right--) {
[this[left], this[right]] = [this[right], this[left]]
}
return this
};
我已经编写了一些测试来检查该方法是否按预期工作。
describe('yarra', function () {
it('should reverse an array in place and return it', function () {
var arr = [1,2,3];
var reversedArr = arr.yarra();
reversedArr.should.eql([3,2,1]);
arr.should.equal.reversedArr;
[4,5,6].yarra().should.eql([6,5,4]);
});
});
我意识到测试没有按预期工作,因为我将数组反转并返回了一个新数组,但它仍然通过了。另外,因为var reversedArr = arr.yarra() 意味着 arr 总是等于 reversedArr,所以它并没有真正检查任何东西。
我将如何编写一个可以检查数组是否反转到位的测试?
【问题讨论】:
-
你为什么不能使用 arr.slice().yarra() 来比较呢?还是我错过了什么?
-
@ibowankenobi .slice 会创建一个新数组,因此无法比较
arr.should.equal.arr.slice().yarra(),您的意思是这样吗? -
我希望你故意创建一个新副本,否则会颠倒过来,旧的将始终是同一个数组,因为它们是同一个对象。因为在你的问题中你说它自己并没有真正做任何事情。我能想到的一件事是用 JSON.stringify 对它们进行字符串化并比较字符串。
标签: javascript arrays unit-testing mocha.js chai