![](/img/trans.png)
[英]Jest unit test - mock value of async function within async function
[英]Mocking a function within an express request for a Jest Unit test
我有一個簡單的快速應用程序,我希望完全能夠模擬它,這就是我到目前為止所擁有的
userRoute.js
const express = require("express")
const router = express.Router()
const db = require('./db')
router.get("/users/", async (req, res) => {
res.json({
status: 200,
data: await db.getUsers(),
})
})
module.exports = router
我的問題是我試圖模擬db.getUsers
function 但不確定如何
這是我的測試代碼:
const router = require("./userRoute.js")
const app = new express()
app.use("/", router)
describe("Users Route", () => {
test("getUsers Happy Path", async () => {
jest.spyOn(db, "getUsers").mockImplementation(() => {
return {
id:12345
name: "Jason"
age: "34"
}
})
const res = await app.get("/users/")
console.log(res)
})
})
這對我不起作用,如果我在標准 function 中定期運行 function 它可以工作,但由於它是一個 api 端點,無論出於何種原因,它都不會因為任何工作原因而非常棒,
也許您想在需要useRouter.js
之前嘗試模擬數據庫
此外,您需要運行服務器(並在所有測試后關閉它)並向您的服務器發出真正的請求。
const express = require('express');
const axios = require('axios');
const PORT = 5565;
const userMock = {
id: 1,
name: 'John Doe',
email: 'email@email.com',
}
const dbSpy = jest.spyOn(require('./db.js'), 'getUsers').mockImplementation(() => userMock);
const router = require('./index.js');
const app = express();
app.use('/', router);
const server = app.listen(PORT, () => 'Example app listening on port 3000!');
describe('Users Route', () => {
afterAll(() => server.close());
test('getUsers Happy Path', async () => {
const response = await axios.get(`http://localhost:${PORT}/users/`);
expect(dbSpy).toHaveBeenCalledTimes(1);
expect(response.status).toBe(200);
expect(response.data.data).toEqual(userMock);
});
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.