Verwendung habe ich eine Datei mit dem Objekt, das mit process.env
Eigenschaften bevölkert wird:Invalidate Knoten Cache, wenn Jest
env.js
console.log('LOADING env.js');
const {
PROXY_PREFIX = '/api/',
USE_PROXY = 'true',
APP_PORT = '8080',
API_URL = 'https://api.address.com/',
NODE_ENV = 'production',
} = process.env;
const ENV = {
PROXY_PREFIX,
USE_PROXY,
APP_PORT,
API_URL,
NODE_ENV,
};
module.exports.ENV = ENV;
Jetzt habe ich versuchen, diese Datei zu testen, mit verschiedenen process.env
Eigenschaften:
env.test.js
const envFilePath = '../../config/env';
describe('environmental variables',() => {
const OLD_ENV = process.env;
beforeEach(() => {
process.env = { ...OLD_ENV };
delete process.env.NODE_ENV;
});
afterEach(() => {
process.env = OLD_ENV;
});
test('have default values',() => {
const { ENV } = require(envFilePath);
expect(ENV).toMatchSnapshot();
});
test('are string values (to avoid casting errors)',() => {
const { ENV } = require(envFilePath);
Object.values(ENV).forEach(val => expect(typeof val).toEqual('string'));
});
test('will receive process.env variables',() => {
process.env.NODE_ENV = 'dev';
process.env.PROXY_PREFIX = '/new-prefix/';
process.env.API_URL = 'https://new-api.com/';
process.env.APP_PORT = '7080';
process.env.USE_PROXY = 'false';
const { ENV } = require(envFilePath);
expect(ENV.NODE_ENV).toEqual('dev');
expect(ENV.PROXY_PREFIX).toEqual('/new-prefix/');
expect(ENV.API_URL).toEqual('https://new-api.com/');
expect(ENV.APP_PORT).toEqual('7080');
expect(ENV.USE_PROXY).toEqual('false');
});
});
Leider, obwohl ich versuchen, die Datei in jedem Test zu laden separat die Datei nur einmal geladen wird, der dritte Test machen nicht mit:
Expected value to equal: "dev" Received: "production"
P. S. Es scheitert nicht, wenn ich den Test alleine führe.
Ich weiß auch, dass env.js lädt nur einmal, weil console.log('LOADING env.js');
nur einmal ausgelöst wird.
Ich habe versucht, Knoten Cache ungültig zu machen, wie:
beforeEach(() => {
delete require.cache[require.resolve(envFilePath)];
process.env = { ...OLD_ENV };
delete process.env.NODE_ENV;
});
aber require.cache
{}
vor jedem Test leer ist, so scheint es, dass Jest für den Import der Datei irgendwie verantwortlich ist.
Ich habe auch versucht, yarn jest --no-cache
laufen, hat aber nicht geholfen.
Also was ich will ist, laden env.js vor jedem Test, damit ich testen kann, wie es mit verschiedenen Knoten Umgebungsvariablen verhält.
[email protected]^22.0.4
Welche Version von 'jest' zurückgesetzt verwenden Sie? –
@Prakashsharma 22.0.4 – Tomasz
Versuchen Sie 'jest.resetModules()' in 'beforeEach' zu verwenden. https://facebook.github.io/jest/docs/en/jest-object.html#jestresetmodules –