node.js - Jest ile express.Application'ı nasıl taklit edebilirim?
Express'i bir argüman olarak alan bazı sınıf (temel DI):
class App {
constructor(express: express.Application) { /* ... */ }
}
Benim testim:
// this doesn't work ("argument not assignable"):
//const expressMock = jest.mock("express");
//let app = new App(expressMock);
// so how do I mock it?
const expressMock = ???
let app = new App(expressMock);
Jest ile express.Application nasıl taklit edilir? Sadece bir istek veya rota değil, tamamı.
Cevap #1
Teknik olarak, express.Application taklit edilemez, çünkü bir arayüzdür. Taklit edilmesi gereken, onun temsil ettiği nesnedir.
Belgelere göre jest.mock,
Zincirleme için jest nesnesini döndürür.
Yani bu, taklit edilmiş nesneyi almak için doğru bir yol değildir:
const expressMock = jest.mock("express");
Doğru olan biri olurdu
jest.mock("express");
...
const expressMock = require("express");
Ayrıca, App express fabrika fonksiyonunu değil, express() çağrısının sonucu olan uygulama nesnesini kabul eder.
Fabrika fonksiyonu olmadan jest.mock, doğru uygulama nesnesi üretmeyecek otomatik olarak taklit edilmiş express fabrikası ile sonuçlanır.
Testlerde expressMock doğrudan App'e geçtiği için Express modülünü taklit etmeye gerek yoktur. Bunun yerine sadece asgari düzeyde bir uygulama içeren bir taklit geçirilebilir:
const expressMock = {
use: jest.fn(),
...
} as any as express.Application;
let app = new App(expressMock);
