example - ¿Cómo apalear process.env en node.js?
sinon stub method (4)
Con sinon puedes tachar cualquier variable como esta.
var myObj = {
example: ''oldValue'',
};
sinon.stub(myObj, ''example'').value(''newValue'');
myObj.example; // ''newValue''
Este ejemplo es la forma de documentación de sinon. https://sinonjs.org/releases/v6.1.5/stubs/
Con ese conocimiento, puedes apilar cualquier variable de entorno. En tu caso se vería así:
ar stub = sinon.stub(process.env, ''FOO'').value(''bar'');
Quiero apalear process.env.FOO
con bar
.
var sinon = require(''sinon'');
var stub = sinon.stub(process.env, ''FOO'', ''bar'');
Estoy confundido. Leo el documento, pero todavía no lo entiendo. docs de sinonjs
sinonjs es un ejemplo, no sinonjs está bien.
Desde mi entendimiento de process.env
, simplemente puede tratarlo como cualquier otra variable al establecer sus propiedades. Sin embargo, tenga en cuenta que cada valor en process.env
debe ser una cadena. Por lo tanto, si necesita un valor particular en su prueba:
it(''does something interesting'', () => {
process.env.NODE_ENV = ''test'';
// ...
});
Para evitar que se filtre el estado a otras pruebas, asegúrese de restablecer la variable a su valor original o eliminarla por completo:
afterEach(() => {
delete process.env.NODE_ENV;
});
En un spec-helper.coffee
o algo similar en el que configuró su caja de arena de Sinon, realice un seguimiento del process.env
original spec-helper.coffee
y spec-helper.coffee
después de cada prueba, para que no se filtre entre las pruebas y no tenga que acordarse de reiniciar cada vez.
_ = require ''lodash''
sinon = require ''sinon''
beforeEach ->
@originalProcessEnv = _.cloneDeep process.env
afterEach ->
process.env = _.cloneDeep @originalProcessEnv
En su prueba, use process.env
como de costumbre.
it ''does something based on an env var'', ->
process.env.FOO = ''bar''
Pude hacer que process.env
se coloque correctamente en mis pruebas unitarias mediante la clonación y en un método de desmontaje que lo restaure.
Ejemplo usando Mocha
const env = Object.assign({}, process.env);
after(() => {
process.env = env;
});
...
it(''my test'', ()=> {
process.env.NODE_ENV = ''blah''
})
Tenga en cuenta que esto solo funcionará si el proceso.env solo se lee en la función que está probando. Por ejemplo, si el código que está probando lee la variable y lo usa en un cierre, no funcionará. Es probable que invalide el caché que necesita para probar eso correctamente.
Por ejemplo, lo siguiente no tendrá el env del apéndice:
const nodeEnv = process.env.NODE_ENV;
const fnToTest = () => {
nodeEnv ...
}