2016-07-11 4 views
4

У меня есть два массива:Should.js: проверить, если два массива содержат одинаковые строки

var a = ['a', 'as', 'sa']; 
var b = ['sa', 'a', 'as']; 

Есть ли что-нибудь особенное в shouldJS, чтобы проверить, если эти два массива имеют одинаковые элементы? Anything Like

should(a).be.xyz(b) 

которые могут проверить их? Здесь xyz - это то, что я ищу.

ответ

2

Наивное, но, возможно, достаточное решение было бы сортировать массивы перед их сравнением:

should(a.sort()).be.eql(b.sort()) 

Обратите внимание, что sort() works in-place, мутируют исходные массивы.

+1

Этот ответ является неправильным. .equal использует === для ссылочного равенства. Необходимо использовать .eql. –

+0

@denbardadym Спасибо за заметку, обновил мой ответ. – Timo

1

Вы можете реализовать это с помощью функции Assertion.add. Например:

var a = ['a', 'as', 'sa']; 
var b = ['sa', 'a', 'as']; 

should.Assertion.add('haveSameItems', function(other) { 
    this.params = { operator: 'to be have same items' }; 

    this.obj.forEach(item => { 
    //both arrays should at least contain the same items 
    other.should.containEql(item); 
    }); 
    // both arrays need to have the same number of items 
    this.obj.length.should.be.equal(other.length); 
}); 

//passes 
a.should.haveSameItems(b); 

b.push('d'); 

// now it fails 
a.should.haveSameItems(b);