2017-07-26 87 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'); 
    ... 
});