5

だから、私はモカとチャイを使ってフロントエンドのテストを行っていますが、シノンを取​​り入れ始めて、とても気に入っています. エラーをスローするテストが、sinonのドキュメントが示すようにまったく機能していないことを除いて。

基本的に、私はこの方法を持っています:

create: function(bitString, collectionType) {
    var collection;

    switch(collectionType) {
        case 'minutesOfHour':
            collection = this.createMinutesOfHour(bitString);
            break;

        case 'hoursOfDay':
            collection = this.createHoursOfDay(bitString);
            break;

        case 'daysOfWeek':
            collection = this.createDaysOfWeek(bitString);
            break;

        case 'daysOfMonth':
            collection = this.createDaysOfMonth(bitString);
            break;

        case 'monthsOfYear':
            collection = this.createMonthsOfYear(bitString);
            break;

        default:
            throw new Error('unsupported collection type ' + collectionType);
    }

    return collection;
},

そして、私はこの期待でそれをテストしています:

it('throws error if missing second arguement', function() {
    sinon.spy(factory, 'create');

    factory.create();

    expect(factory.create).to.have.thrown();

    factory.create.restore();
});

ただし、テストしようとしているエラーも、テストの実行を停止しているようです

エラーメッセージ

sinon.spy には try / catch ロジックが内部的に含まれていると思っていましたが、spy.throw はそれなしではあまり役に立ちません。

http://sinonjs.org/docs/#spies

私は何か間違ったことをしていますか??

4

3 に答える 3

0

あなたの予想では、chai と sinon の構文が混在していました。試す

expect(factory.create.threw()).to.be.ok();
于 2013-09-14T19:33:54.450 に答える
-1

error直接テストしていない関数、つまりajax 呼び出しのメソッドでエラーがスローされたことを確認したい場合があります。

このアプローチは私にとってうまくいきました:

errorStub = sinon.stub(jQuery, "ajax").yieldsTo("error");

try {
  triggerError();  // triggers ajax call which yields to an error
}

expect(errorStub.threw()).to.be.true
于 2014-11-06T20:53:43.263 に答える