2017-07-26 4 views
0

私が書いた関数のいくつかのテストを書くことに取り組んでいます。現在のコードは期待通りに機能しますが、今はコードとリファクタをDRYする必要があります。私がすべてのスタブを持っているので、私は挑戦的な発見だスタブをリファクタリングすることができるはずように私には思われるが多くの繰り返しコードを持つユニットテストをリファクタリングします。

QUnit.test('Localized Date in Honolulu', assert => { 
 
    const stub = sinon.stub(constantDate, 'getTimezoneOffset',() => { 
 
    return '600'; 
 
    }); 
 
    console.log('timeSet', timeSet()); 
 
    assert.strictEqual(timeSet(), '2017-07-29T14:00:00.000Z', 'there needs to be a message here'); 
 
    stub.restore(); 
 
}); 
 

 
QUnit.test('San Francisco Date and Time', assert => { 
 
    const stub = sinon.stub(constantDate, 'getTimezoneOffset',() => { 
 
    return '420'; 
 
    }); 
 
    assert.strictEqual(timeSet(), '2017-07-29T17:00:00.000Z'); 
 
    stub.restore(); 
 
}); 
 

 
QUnit.test('Sydney time', assert => { 
 
    const stub = sinon.stub(constantDate, 'getTimezoneOffset',() => { 
 
    return '-600'; 
 
    }); 
 
    assert.strictEqual(timeSet(), '2017-07-30T10:00:00.000Z', 'Expected the time in Sydney to be 10AM'); 
 
    stub.restore(); 
 
});

:あなた以下 は私がwritternてきたユニットテストが表示されます毎回異なる戻り値。コードをきれいにして乾燥させる方法についていくつか提案してもらえますか?

答えて

1

1つの提案は、部分的な機能を使用することです。ご存知のように、sinon.stubの最初の2つのパラメータは、すべてのユニットテストで同じです。ユニットテストを実行する前に、我々は機能

const timezoneOffsetStub = (callback) => { 
    return sinon.stub(constantDate, 'getTimezoneOffset', callback); 
} 

を作成することができます(これはconstantDateは、グローバルに定義された変数であると想定) だから今、各ユニットテストでスタブにし、我々は唯一異なるのコールバックが何であるかを定義する必要があります。

QUnit.test('Localized Date in Honolulu', assert => { 
    const stub = timezoneOffsetStub(() => '600'); 
    ... 
}); 

QUnit.test('San Francisco Date and Time', assert => { 
    const stub = timezoneOffsetStub(() => '420'); 
    ... 
}); 
関連する問題