Строгое ровно внутри массива - PullRequest
1 голос
/ 29 января 2020

Я хочу проверить, что два массива содержат одинаковые элементы (не глубокие равные) в одном и том же порядке.

var a = { id: 1 }
var b = { id: 2 }
var c = { id: 3 }

var arr = [a, b, c]

expect(arr).to.______([a, b, c])               // true

expect(arr).to.______([a, c, b])               // false: different order
expect(arr).to.______([a, b])                  // false: missing element
expect(arr).to.______([a, b, c, { id: 4 }])    // false: extra element
expect(arr).to.______([a, b, { id: 3 }])       // false: different object reference

Конечно, я могу написать

assert.strictEqual(arr.length, expected.length, "length");
for (let q = 0; q < arr.length; ++q) assert.strictEqual(arr[q], expected[q], `[${q}]`);

Но я думаю, для этого уже должен быть какой-то метод.

1 Ответ

1 голос
/ 29 января 2020

Вы можете использовать .ordered в сочетании с .members, например:

По умолчанию элементы сравниваются с использованием строгого (= ==) равенство. Добавьте .deep ранее в цепочке, чтобы использовать глубокое равенство.

const expect = chai.expect;

const a = 1;
const b = 2;
const c = 3;

const input = [a, b, c];

expect(input).to.have.ordered.members([a, b, c]);
expect(input).to.not.have.ordered.members([b, a, c]);
expect(input).to.not.have.ordered.members([a, c, b]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>
...