Я тестирую приложение Express с Jest и столкнулся с небольшой проблемой - модуль использует переменную, которая инициализируется перед выполнением теста, вот мое приложение . js file:
const app = express();
const isDev = process.env.NODE_ENV === 'development';
app.get('*', (req, res, next) => {
if (isDev) {
res.status(404).json({ error: 'Wrong URL' });
} else {
res.sendFile(path.join(__dirname, '../index.html'));
}
});
app.use(errorHandler);
module.exports = app;
Когда я запускаю Jest тесты, мой process.env.NODE_ENV
равен test
, поэтому я не могу покрыть первое if
условие, где isDev
равно true
. Я пытался переназначить process.env.NODE_ENV
перед тестовым запросом - он работает, но поскольку isDev
инициализация переменной была выполнена до выполнения теста, она не сработала.
Это мой тест:
const request = require('supertest');
const app = require('../app');
describe('GET /*', () => {
const OLD_ENV = process.env;
beforeEach(() => {
// Clear JEST cache
jest.resetModules();
process.env = { ...OLD_ENV };
Reflect.deleteProperty(process.env, 'NODE_ENV');
});
test('Not existing path (development env) - 404 status', async () => {
process.env.NODE_ENV = 'development';
const response = await request(app).
get('/wrongUrl');
expect(response.status).toBe(404);
});
});
Как мне сменить переменную isDev
внутри моего теста?