我想使用 jest 來介紹以下代碼:
@Debounce(100)
private checkDataToPositionInStep(): void {
const proposalConsultData = this.proposalConsultResponseStore.get();
if(proposalConsultData?.documentProposalData?.length > 1) {
this.fullScreenLoaderService.hideLoader();
this.router.navigate(['proposta-enviada']);
return;
}
if(proposalConsultData?.warrantyData?.plateUf) {
this.fullScreenLoaderService.hideLoader();
this.router.navigate(['upload']);
}
if(proposalConsultData?.bankData?.branchCode) {
this.fullScreenLoaderService.hideLoader();
this.scrollService.next(STEP_ACCORDION.DADOS_GARANTIA.STEP);
this.stepperService.next(STEP_ACCORDION.DADOS_GARANTIA.ID);
return;
}
this.fullScreenLoaderService.hideLoader();
this.scrollService.next(STEP_ACCORDION.DADOS_BANCARIOS.STEP);
this.stepperService.next(STEP_ACCORDION.DADOS_BANCARIOS.ID);
return;
}
debounce 裝飾器是這樣的:
export function Debounce(timeout: number): Function {
return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = function debounce(...args) {
setTimeout(() => {
original.apply(this, args);
}, timeout);
}
return descriptor;
}
}
當我運行npm run:coverage裝飾器下方的所有行時,它們都沒有覆寫。反正有沒有覆寫這條線?
我只是嘗試像這樣呼叫 checkDataToPositionStep 方法:
it('Should call checkDataToPositionInStep with only bankData', () => {ons
const = proposalConsultMock = <any> {
bankData: {
branchCode: '01901'
}
};
(facade as any).checkDataToPositionInStep(proposalConsultMock );
});
我認為開玩笑應該涵蓋 checkDataToPositionStep 方法。
uj5u.com熱心網友回復:
首先:你錯過了一個expect(...)電話嗎?如
expect(
(facade as any).checkDataToPositionInStep(proposalConsultMock)
).not.toThrowError();
其次:裝飾器應該與主要組件分開測驗。這樣您就可以同時checkDataToPositionInStep測驗函式以及Debounce另一個測驗檔案中回傳的函式:
it('should do something', () => {
// Create your instance
const debounceFunction = Debounce(60);
// Execute your function
const result = debounceFunction(params...);
// Expect a correct result
expect(result).toBe(something);
});
您可能還想檢查您的測驗檔案是否正確包含在覆寫配置中。
最后,我不同意@facundo 關于不關心測驗覆寫率的建議。這取決于背景關系以及出于代碼質量原因,您可能希望確保一定比例的代碼經過良好測驗,同時避免軟體回歸。
uj5u.com熱心網友回復:
感謝您的幫助,我找到了使用jest.useFakeTimers()and的解決方案jest.runAllTimers();。問題出在 setTimeout 上。下面的代碼現在涵蓋了 checkDataToPositionInStep 方法。
proposalConsultMock = <any> {
documentProposalData: [{
tpDocumentoProposta: 149
},{
tpDocumentoProposta: 90
}],
};
jest.useFakeTimers();
setTimeout(() => {
(facade as any).checkDataToPositionInStep(proposalConsultMock);
}, 1000);
jest.runAllTimers();
uj5u.com熱心網友回復:
只是一個建議......理想情況下,您不應該關心覆寫范圍本身,您希望確保事情得到測驗。考慮到這一點,如果您想確保對 Debounce 裝飾器進行測驗,您可以專門為其創建一組單元測驗。
更新
我只是想澄清一下,當我說“你不應該關心覆寫率本身”時,我并不是說你不應該關心代碼覆寫率,這是一個需要關注的非常重要的指標。但覆寫并不總是意味著您正在測驗所有內容。請小心。
import { Debounce } from './Debouncefile';
describe('Debounce', () => {
it('should do something', () => {
// Arrange
const debounceFunction = Debounce(60);
// Act
const result = debounceFunction(params...);
// Assert
expect(result).toBe(something);
});
});
希望這可以幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527719.html
