我需要測驗一個在一個物件上回傳超過 100 條記錄的函式。我想知道如何在不必逐條傳遞到測驗記錄的情況下測驗此功能。
我獲得 100% 覆寫率的方法是使用模擬資料(超過 100 條記錄)創建一個檔案并將其傳遞給測驗。但我想知道我是否可以像用幾條記錄一樣測驗這個函式,所以我的模擬資料檔案不是那么大。
這是目前的測驗覆寫率。從 34 到 161 的那些行是需要測驗的行。
-----------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------------------------|---------|----------|---------|---------|-------------------
All files | 96.15 | 49.59 | 100 | 96.15 |
subNavBackgrounds.js | 100 | 25.87 | 100 | 100 | 34-161
-----------------------------|---------|----------|---------|---------|-------------------
這是一個簡單的功能。
subNavBackgrounds.js
export const getSubNavObject = (color = '#000000', image = null) => {
return { color, image };
};
export function getSubNavBackgrounds(image) {
const isDesktop = getDevice(Store) === 'desktop';
// this is a list with around 400 items
return {
// let's say the line below is the first one uncovered
action: getSubNavObject('#000', image || (isDesktop ? 'a.jpg' : 'b.jpg'), // line 34
// and so on
// let's say the line below is the last one uncovered
comedy: getSubNavObject('#fff', image || (isDesktop ? 'c.jpg' : 'd.jpg'), // line 161
}
};
所以基本上在那個報告中,它說的是函式的回傳方法之間的行(34-161)getSubNavBackgrounds
被測驗發現了。
我撰寫的測驗不適用于我的目的,因為它們會測驗每條記錄:
import { getSubNavBackgrounds } from './subNavBackgrounds';
const mObj = {
action: { color: '#4E4E4E', image: 'image.jpg' }
};
describe('contentSubNavBackgrounds suite', () => {
it('the subnav background responds properly to the dynamic image param', () => {
expect(getContentSubNavBackgrounds('image.jpg'))
.toStrictEqual({ ...mObj });
});
it('the subnav background responds properly mobile view', () => {
expect(getContentSubNavBackgrounds())
.toBe(
{
action: {
color: '#4E4E4E',
image: "https://some-mobile.jpeg"
}
}
);
});
it('the subnav background responds properly desktop view', () => {
Store.dispatch(setPageData({
device: 'desktop',
}));
expect(getContentSubNavBackgrounds())
.toBe(
{
action: {
color: '#4E4E4E',
image: "https://some-desktop.jpg"
}
}
);
});
});
在下面的螢屏截圖中,您將看到這是如何失敗的,例如第一次測驗:
關于如何測驗它的任何想法?
uj5u.com熱心網友回復:
您可以使用物件鍵創建一個串列并基于它構建物件斷言
const keys = [
"action",
"comedy",
// ... the rest
]
expect(getContentSubNavBackgrounds()).toBe(
Object.fromEntries(
keys.map(k => [k, {
color: '#4E4E4E',
image: "https://some-desktop.jpg"
}])
)
)
或使用.toMatchSnapshot()生成快照,每當輸出更改時都會很明顯
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/508587.html
標籤:javascript 反应 单元测试 下一个.js 开玩笑的
下一篇:單元測驗建構式初始化和公共邏輯