4
這裏我有一個函數generateBlocks
,它需要一個數組blocks
和函數onBlockClick
。它返回一個對象數組,其中每個對象都有兩個屬性label
和onClick
。如何測試返回函數的函數?
function generateBlocks(blocks, onBlockClick){
return blocks.map(block => (
{
label: block.label,
onClick:()=>onBlockClick(block.name)
}
))
}
我無法測試它的返回值。 這裏的測試用例:
const blocks = [{label: "A", name: "a"}, {label: "B", name: "b"}];
const onBlockClick = someFunction(){};
expect(generateBlocks(blocks, onBlockClick)).to.deep.equal(expected)
我無法創建expected
爲[[{label: "A", onClick:()=>onBlockClick("A")},...]
,因爲函數的引用也會有所不同。
那麼我該如何重構generateBlocks函數才能使其可測試?
您採取的第一步是詢問**「我如何測試它?」**。接下來你應該問自己的問題是**「我想在這裏測試什麼?」**。如果你實際上不知道你想測試什麼,那麼很難重構現有代碼來使其可測試。 – byxor
那麼,不要使用'deep.equal'?只要聲明每個對象都有一個'.label',並且在傳入'onBlockClick'的標識函數時,它的'.onclick()'返回名稱。 – Bergi
@Brandon請參閱**清楚說明的測試用例**我想要測試的是**返回值**。 –