![](/img/trans.png)
[英]Passing arguments to a function which is created using the new function keyword in javascript
[英]Jest - trying to mock db connection that is created in a function using new keyword
我有以下從 mssql 中獲取數據的代碼。 有什么辦法可以模擬連接池嗎? 我想讓 pool.request().execute() 調用返回一些模擬數據。 我不認為這是可能的,我目前正在努力思考如何測試這個 function。
我能想到的唯一解決方案是將 ioc 用於連接池。 但在我提前 go 之前,我只想確保不可能模擬連接池。
謝謝
const fetchData ({args}) => {
const pool = await new ConnectionPool(conn.getConfig()).connect();
const result = await pool.request().input(...args).execute('Get_Some_Data');
pool.close();
// business logic below I want to test
...
...
}
我一直在谷歌搜索並檢查文檔。 我不認為這是可能的,但我想確認一下。
您可以使用 `jest.fn().mockImplementation() 模擬構造函數。 在文檔中閱讀更多相關信息。
const mockPool = {
connect: () => mockPool,
request: () => mockPool,
input: () => mockPool,
execute: () => {
console.log("Called mock execute");
return [1, 2, 3];
},
close: () => console.log("Closed")
}
const ConnectionPool = jest.fn().mockImplementation(() => mockPool)
我假設您正在使用來自mssql
package 的ConnectionPool
。
const {ConnectionPool} = require("mssql");
const fetchData = async ({args}) => {
const pool = await new ConnectionPool(conn.getConfig()).connect();
const result = await pool.request().input(...args).execute('Get_Some_Data');
pool.close();
// business logic
return result;
}
const {fetchData} = require('./fetch-data');
jest.mock('mssql', ()=> {
const mockPool = {
connect: () => mockPool,
request: () => mockPool,
input: () => mockPool,
execute: () => {
console.log("Called mock execute");
return [1, 2, 3];
},
close: () => console.log("Closed")
}
return {
ConnectionPool: jest.fn().mockImplementation(() => mockPool)
}
});
it('Mock Connection Pool', async () => {
const data = await fetchData({args: []});
expect(data).toStrictEqual([1, 2, 3]);
});
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.