簡體   English   中英

開玩笑 - spyOn 沒有代碼覆蓋實際實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM