【问题标题】:Test to check if array is reversed in place测试以检查数组是否反转到位
【发布时间】: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


【解决方案1】:

const assert = require('assert');


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('yarra1', () => {
    it('should reverse an array in place and return it', () => {
      let arr = [1,2,3];
      let rev = [3,2,1];
      let reversedArr = arr.yarra();
      for(let i =0;i<arr.length;i++){
        assert(reversedArr[i]===rev[i])
      }
    });
  });

  describe('yarra2', () => {
    it('should reverse an array in place and return it', () => {
      let arr = [1,2,3];
      let rev = [3,2,1];
      let reversedArr = arr.yarra();
      assert(reversedArr.toString() === rev.toString())
    });
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多