簡體   English   中英

Mocking 和 function 在 Jest 單元測試的明確請求中

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

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