Как проверить массивы в рамках тестирования chai? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь проверить значения, возвращаемые методом последовательности Фибоначчи. Я создал тест, который проверяет, равен ли результат последовательности Фибоначчи.

describe('#fibonacciSequence(myNumber)', () => {
    it('should return a fibonacci sequence', () => {
        const result = fibonacciSequence(10);
        const fibSeq = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ];
        expect(result).to.equal(fibSeq);
    });
});

Я получаю следующую ошибку утверждения.

AssertionError: expected [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ] to equal [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ]
      + expected - actual

Я не могу понять, почему я получаю ошибку, даже если результат правильный. Я пытался использовать chai arrays, но это не сработало

Ответы [ 2 ]

0 голосов
/ 07 января 2019
expect(result).to.equal(fibSeq);

строго равен, и ожидаемый массив и массив результатов не содержат одну и ту же ссылку. Поэтому не равно

вы можете попробовать использовать глубокое равенство, чтобы увидеть, совпадают ли результаты массива

expect(result).to.deep.equal(fibSeq);
0 голосов
/ 06 января 2019

Вы делаете это правильно, но вы забыли, что объекты и массивы не являются простыми значениями, поэтому:

[1,2]===[1,2] //false
[1,2]==[1,2] //false

Так что оберните вместо result и fibSeq в JSON.stringify(), как это:

describe('#fibonacciSequence(myNumber)', () => {
    it('should return a fibonacci sequence', () => {
        const result = fibonacciSequence(10);
        const fibSeq = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ];
        expect(JSON.stringify(result)).to.equal(JSON.stringify(fibSeq));
    });
});
...