簡體   English   中英

在 Express NodeJS 中測試 REST API

[英]Testing REST API in Express NodeJS

我需要在 NodeJS/Express 中開發 mocking REST API。 我已經在使用 Jest 並嘗試使用 Supertest / Nock 進行 API 測試。 據我了解,Supertest 將調用實際的 API 而不僅僅是模擬它。 我不想要這個,因為它會在數據庫等中創建條目。

我嘗試使用 Nock 並且似乎是我需要的,但問題是我在路由處理程序中引用“req”和“res”對象,在測試期間單獨調用處理程序時這是未定義的。

代碼:server.js

app.get("/api/user/:id/movies",testHander)

testHander.js

const axios = require("axios");

const testHander = async (req,res) =>{
    let id = req.params.id;
    const data = await axios.get(`http://backendServerURL/user/${id}/movies`)
    return res.send(data);
}

測試.test.js

const nock = require("nock");
const testHander = require("../handler/testHander");

describe("Test Handler", () => {
  it("should return user movies", () => {
    const id = 1;

    nock("http://someRandomURL")
      .get(`/user/${id}/movies`)
      .reply(200, { data: { movies: [{ name: "Avengers", year: "2019" }] } });

    const response = await testHander();

    expect(response.data).toBe("someExpectation")
  });
});

問題:我應該如何測試這段代碼,通過 mocking backendServerUrl?

所以我會放棄,因為你可以用axios nock jest你已經在使用它了,不需要導入另一個模塊。

從頭開始.js

const axios = require('axios')

module.exports.handler = async (req, _) => {
    const { id } = req.params
    const data = await axios.get(`http://backendServerURL/user/${id}/movies`)

    return data
}

從頭開始測試.js

jest.mock('axios')

const axios = require('axios')
const { handler } = require('../scratch')

it('should return mock movie data from axios get request', async () => {
    const id = 8238010
    const mockMovie = { data: { movies: [{ name: 'Avengers', year: '2019' }] } }
    const mockRequest = { params: { id } }

    axios.get.mockResolvedValue(mockMovie)

    const response = await handler(mockRequest)

    expect(axios.get).toHaveBeenCalledTimes(1)
    expect(axios.get).toHaveBeenCalledWith(`http://backendServerURL/user/${id}/movies`)
    expect(response).toEqual(mockMovie)
})

axios返回一個 promise 所以我們將使用mockResolvedValue而不是mockReturnedValue ,我們只想模擬get ,這就是我們要針對的斷言。

這里有一些對未來有用的資源: https://jestjs.io/docs/en/mock-functions.html httpsect://jestjsexpio。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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