2017-07-26 69 views
0

我正在爲我寫的一個函數編寫一些測試:當前代碼正常工作,但現在我需要幹我的代碼和重構。 下面你將看到的單元測試,我writtern:重構一些有許多重複代碼的單元測試。

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(); 
 
});

雖然在我看來,我應該能夠重構存根我發現具有挑戰性的,因爲每一個存根有每次返回值不同。我可以請我得到一些關於如何使我的代碼乾淨和乾燥的建議。

回答

1

一個建議是使用部分函數。如您所知,sinon.stub中的前兩個參數對於每個單元測試都是相同的。因此,單元測試執行之前,我們可以創建一個函數

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'); 
    ... 
});