[英]Jest - spyOn does not code cover actual implementation
我正在為 Typescript 進行 Jest 單元測試,我創建了一個方法
addNumbers:() {
return 6;
}
它只是用於測試目的的 static 測試方法。
我用 jest 創建了一個單元測試
spyOn(object, 'addNumbers').mockReturnValue(6);
expect(object.addNumbers).toHaveBeenCalled(); // expect is success
單元測試工作正常,但在檢查代碼覆蓋率時“返回 6;” 不包括在內。
不確定缺少什么、配置或任何其他問題。
因為一旦這個工作,需要在實際代碼中實現。
如果需要任何其他信息,請告訴我。
提前致謝...
spyOn(object, 'addNumbers').mockReturnValue(6);
在這里,您嘲笑了 function,這就是為什么不調用原始 function 的原因。
就這樣使用,不要只模擬 spyOn
const addNumbersSpy = spyOn(object, 'addNumbers')
expect(addNumbersSpy).toHaveBeenCalled()
實際代碼和代碼覆蓋率圖像。 該代碼包含在使用模擬
主要代碼:
export class Main {
addNumber(a: number, b: number) {
return a + b;
}}
export default Main;
單元測試代碼
import { Main } from './main'
describe('Add Number', () => {
test('sum', () => {
let a = new Main();
let b = jest.spyOn(a, 'addNumber').mockReturnValue(3).mockImplementation(() => 3);
expect(a.addNumber(1, 2)).toEqual(3)
})
})
這是一個死問題,但我認為寫一個解釋以防萬一以后有人偶然發現這個問題(就像我一樣)。
我相信您所觀察到的是預期的行為-如果您在測試中是 mocking 和 function,那么實際上不會調用 function。 我不希望代碼覆蓋率報告中涵蓋未在測試中執行的代碼。
聽起來您對如何實際測試您的方法感到困惑; 來自Main
class 的addNumber
方法的單元測試看起來像這樣:
import { Main } from './main'
describe('Add Number', () => {
test('sum', () => {
// Arrange
let main = new Main();
// Act
let result = a.addNumber(1, 2);
// Assert
expect(result).toEqual(3)
})
})
Mocks 是一個幫助您測試代碼的實用程序 - 模擬本身並不意味着要進行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.