Я изучаю Dependency Injection и пытаюсь использовать его в простом nodejs приложении. Это приложение должно получить некоторые данные с помощью внешнего API. Использовать DI в этом случае было просто, я просто добавил зависимость в качестве параметра функции, и она работала как шарм.
async function foo(URL,get_data){
var bar = await get_data(URL);
return bar;
}
Когда приложение работает, get_data
будет функцией, которая выполняет реальный запрос и при модульном тестировании моего приложения это будет фиктивная функция.
Как применить эту же методологию для ExpressJS?
Я хочу, чтобы он обращался к базе данных, когда использует приложение, и фиктивных данных, когда он тестирует, но я не могу понять, как, потому что я больше не имею дело со свойствами функций.
В этом примере:
// index.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 5000;
var db = require('./model/db')
app.get('/users',(req,res) =>{
db.get_users(function(users){
res.send(users);
})
});
app.listen(PORT, () => console.log(`Server listening to port: ${PORT}`));
module.exports = app;
Мне нужно использовать реальный дБ, когда сервер работает, и фиктивный при тестировании с супертестом.
// index.text.js
const request = require('supertest');
const app = require('index');
describe("GET /user", function(){
it('should respond with a json', function(done){
request(app)
.get('/users')
.expect('Content-Type',/json/)
.expect(200,done);
});
});