Внедрение зависимостей в ExpressJS - PullRequest
0 голосов
/ 21 марта 2020

Я изучаю 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);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...