Je veux stub process.env.FOO
avec bar
.
var sinon = require('sinon');
var stub = sinon.stub(process.env, 'FOO', 'bar');
Je suis confus ... Je lis le document, mais je ne comprends toujours pas. sinonjs docs
sinonjs est un exemple, pas sinonjs va bien.
D'après ma compréhension de process.env
, vous pouvez simplement le traiter comme n'importe quelle autre variable lors de la définition de ses propriétés. Gardez toutefois à l'esprit que chaque valeur dans process.env
doit être une chaîne. Donc, si vous avez besoin d’une valeur particulière dans votre test:
it('does something interesting', () => {
process.env.NODE_ENV = 'test';
// ...
});
Pour éviter toute fuite d’état dans d’autres tests, veillez à rétablir la valeur initiale de la variable ou à la supprimer:
afterEach(() => {
delete process.env.NODE_ENV;
});
J'ai pu obtenir que process.env
soit correctement stubé dans mes tests unitaires en le clonant et en le restaurant par une méthode de démontage.
Exemple d'utilisation de moka
const env = Object.assign({}, process.env);
after(() => {
process.env = env;
});
...
it('my test', ()=> {
process.env.NODE_ENV = 'blah'
})
Gardez à l'esprit que cela ne fonctionnera que si le fichier process.env est uniquement lu dans la fonction que vous testez. Par exemple, si le code que vous testez lit la variable et l'utilise dans une fermeture, cela ne fonctionnera pas. Vous invalidez probablement l'exigence mise en cache pour tester cela correctement.
Par exemple, les envois suivants ne seront pas stubbed:
const nodeEnv = process.env.NODE_ENV;
const fnToTest = () => {
nodeEnv ...
}
Dans un spec-helper.coffee
ou quelque chose de similaire où vous avez configuré votre sandbox sinon, gardez une trace du process.env
d'origine et restaurez-le après chaque test afin d'éviter toute fuite entre les tests et de ne pas vous rappeler de réinitialiser à chaque fois.
_ = require 'lodash'
sinon = require 'sinon'
beforeEach ->
@originalProcessEnv = _.cloneDeep process.env
afterEach ->
process.env = _.cloneDeep @originalProcessEnv
Dans votre test, utilisez process.env
comme d'habitude.
it 'does something based on an env var', ->
process.env.FOO = 'bar'
Sinon, vous pouvez écraser n'importe quelle variable comme celle-ci.
var myObj = {
example: 'oldValue',
};
sinon.stub(myObj, 'example').value('newValue');
myObj.example; // 'newValue'
Cet exemple est formulaire sinon documentation. https://sinonjs.org/releases/v6.1.5/stubs/
Avec cette connaissance, vous pouvez remplacer n'importe quelle variable d'environnement . Dans votre cas, cela ressemblerait à ceci:
ar stub = sinon.stub(process.env, 'FOO').value('bar');