Я не знаю, действительно ли мой вопрос связан с функциями облака Firebase, но я столкнулся с этой проблемой, пытаясь протестировать мои функции облака Firebase.
Допустим, у меня есть функция облака Firebase, написанная на NodeJS:
function.ts
import * as functions from "firebase-functions"
const admin = require("firebase-admin")
import * as authVerifier from "../../auth/authVerifier"
export default functions.https.onRequest(async (req, res) => {
let authId
try {
authId = await authVerifier.identifyClientRequest(req)
} catch (err) {
console.error(`Unauthorized request error: ${err}`)
return res.status(401).send({
error: "Unauthorized request"
})
}
}
Обычно у меня есть интерфейс, и я могу легко смоделировать любой класс, который я хочу проверить.
И, например, authVerifier выглядит так:
authVerifier.ts
import * as express from "express"
export async function identifyClientRequest(req: express.Request) {
return true // whatever, it doesn't really matter, should be real logic here
}
Я пытаюсь проверить function.ts и я только может передать res и req в него, например:
function.test.ts
it("should verify client identity", async () => {
const req = {
method: "PUT"
}
const res = { }
await myFunctions(req as express.Request, res as express.Response)
// assert that authVerifier.identifyClientRequest(req) called with passed req
})
Так что вопрос: как я могу издеваться authVerifier.identifyClientRequest(req)
использовать разные реализации в function.ts и в function.test.ts?
Я действительно не знаю NodeJS / TypeScript, поэтому мне интересно, могу ли я импортировать другой фиктивный класс authVerifier для теста или что-то в этом роде.