Тест, чтобы проверить, если массив перевернут на месте - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть метод, который я поместил в прототип массива, который инвертирует массив (это сделано только для целей обучения).Этот метод должен обратить массив на место.

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, поэтому он ничего не проверяет.

Как написать тест, который может проверить, не перевернут ли массив на месте?

1 Ответ

0 голосов
/ 25 апреля 2018

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