chai-fuzzy

アンダースコアに基づいて作成され、ジャスミンからヒントを得た、chai用のファジー・マッチャーです。

厳密なオブジェクトの等価性を主張することなく、値にまったく同じ属性と値があることを主張します。

Build Status

使用

また、テストも参照してください。

ブラウザー側

chaiとアンダースコアの後にchai fuzzyを含めます

<script src="underscore.js"></script>
<script src="chai.js"></script>
<script src="chai-fuzzy.js"></script>

サーバー側

chaiでchai-fuzzyを使用します

var chai = require('chai');
chai.use(require('chai-fuzzy'));

アサーション

like(値)

同じ参照であるかどうかをチェックするのではなく、オブジェクトの属性と値を比較します

var subject = {a: 'a'};
subject.should.be.like({a: 'a'});
subject.should.not.be.like({x: 'x'});
subject.should.not.be.like({a: 'a', b: 'b'});

expect(subject).to.be.like({a: 'a'});
expect(subject).not.to.be.like({x: 'x'});
expect(subject).not.to.be.like({a: 'a', b: 'b'});

assert.like(subject, {a: 'a'});
assert.notLike(subject, {x: 'x'});
assert.notLike(subject, {a: 'a', b: 'b'});

var subject = ['a'];
subject.should.be.like(['a']);
subject.should.not.be.like(['x']);
subject.should.not.be.like(['a', 'b']);

expect(subject).to.be.like(['a']);
expect(subject).not.to.be.like(['x']);
expect(subject).not.to.be.like(['a', 'b']);

assert.like(subject, ['a']);
assert.notLike(subject, ['x']);
assert.notLike(subject, ['a', 'b']);

containOneLike(値)

提供されたもののような値のコンテナーの最初のレベルをチェックします

var subject = {
  a:   'alphabet'
  , b: 'butternut'
  , c: {
    name:       'chowder'
    , attributes: [
      'scales'
      , 'fins'
    ]
  }
  , x: 'xylophone'
  , z: 'xylophone'
};
subject.should.containOneLike({
  name:         'chowder'
  , attributes: [
    'scales', 'fins'
  ]
});
subject.should.not.containOneLike({
  name:         'chowder'
  , attributes: [
    'scales', 'fins', 'cream'
  ]
});

subject.should.containOneLike('xylophone');
subject.should.not.containOneLike('cow patties');

expect(subject).to.containOneLike('xylophone');
expect(subject).to.not.containOneLike('cow patties');

assert.containOneLike(subject, 'xylophone');
assert.notContainOneLike(subject, 'cow patties');

// same for arrays

jsonOf(値)

提供されたJavaScriptオブジェクトがJSON化された期待値のようなことをチェックします。オブジェクトの文字列化と解析の確認に便利です。

var apple = {
  skin: 'thin'
  , colors: ['red', 'green', 'yellow']
  , isFruit: true
  , picked: new Date()
};
var orange = {
  skin: 'thin'
  , colors: ['red', 'green', 'yellow']
  , isFruit: true
  , picked: new Date()
};
// here appleJSON would be the json result of some process like a JSON api
var appleJSON  = JSON.parse(JSON.stringify(apple));

appleJSON.should.be.jsonOf(apple);
appleJSON.should.not.be.jsonOf(orange);

expect(appleJSON).to.be.jsonOf(apple);
expect(appleJSON).to.not.be.jsonOf(orange);

assert.jsonOf(appleJSON, apple);
assert.notJsonOf(appleJSON, orange);

謝辞

ジャスミンの部分を切り取るのではなく、アンダースコアを使用するというアイデアを伝えてくれたデービスに感謝します。

アサートスタイルの互換性を追加してくれたバート・ファン・デル・スホールに感謝します。