jest如何mock axios介面

2021-10-10 22:21:47 字數 2372 閱讀 7219

假如要測試以下這個檔案,

models/user.js

import

from

'../service/username'

;export

default

class

user

getusername()

).catch

((err)

=>);

}}

service/user.js (queryusername介面定義在這個檔案中)

import axios from

'axios'

;export

function

queryusername

(id)})

;}

檔案目錄如下:

.

├── service

└── user.js // 定義axios請求的檔案

└── models

├── user.js // 使用axios請求的檔案

└── user.test.js // jest測試檔案

在測試的時候我們常常希望:把queryusername這個介面mock掉,不真正地傳送請求到後端

那就需要在user.test.js中進行mock:

user.test.js

import user from

'./user'

;// mock here

jest.

mock

('../service/user',(

)=>);

}else

is invalid`);

}}),

),};

});describe

('user',(

)=>);

test

('getusername fail'

,async()

=>);});

當你執行 jest user.test.js的時候,queryusername就會用你mock的函式

但假設另乙個模組client.js也用到了queryusername這個介面,那又要在client.test.js中再寫一遍這個jest.mock(』…』,()=>);

那就可以用方法2

在service/user.js同一目錄下,建立__mock__, 然後在__mock__資料夾下mock介面檔案

檔案目錄如下:

.

.├── service

├── __mocks__

│ └── user.js // 新增這個__mocks__/user.js

└── user.js

└── models

├── user.js

└── user.test.js

具體如下:

__mocks __/user.js (在這裡統一寫mock函式)

export

const queryusername = jest.fn(

(id)

=>

newpromise

((resolve, reject)

=>);

}else

is invalid`);

}}),

);

user.test.js (在test檔案中mock對應路徑的模組即可)

import user from

'./user'

;jest.

mock

('../service/user');

// jest.mock('../service/user', () => );

// } else is invalid`);

// }

// }),

// ),

// };

// });

describe

('user',(

)=>);

test

('getusername fail'

,async()

=>);});

完美地通過了所有測試:

Jest測試框架 Jest匹配器

jest常見的匹配器 修改package.json,加乙個 watchall scripts 測試值的最簡單方法是完全相等。test two plus two is four tobe用於object.is測試完全相等。如果要檢查物件的值,請toequal改用 test object assignm...

Jest測試初學(一) Jest 的簡單配置

執行安裝命令 npx jest init 然後在工程的根目錄下會生成乙個jest.config.js檔案 這個檔案值得細細研究!如果想修改測試覆蓋率報告的資料夾名稱,可以在jest.config.js中配置,修改這一項coveragedirectory coverage 執行命令npx jest c...

jest學習筆記

jest測試非同步請求 function fetchdata fn test 非同步請求 done done 如果返回是promise物件,可以用catch或者then function fn test 非同步請求成功 test 非同步請求失敗 還可以這樣 test 測試非同步請求 丟擲異常 ret...