Sinon: O método de stub no mesmo arquivo não funciona

Criado em 5 out. 2016  ·  3Comentários  ·  Fonte: sinonjs/sinon

Estou tentando fazer o teste de unidade de uma função em um arquivo enquanto faço o stub de outra função no mesmo arquivo, mas a simulação não está sendo aplicada e o método real está sendo chamado. Aqui está um exemplo:

// file: 'foo.js'

export function a() {
   // .....
}

export function b() { 
   let stuff = a(); // call a
   // ...do stuff
}

E meu teste:

import * as actions from 'foo';

const aStub = sinon.stub(actions, 'a').returns('mocked return');
actions.b(); // b() is executed, which calls a() instead of the expected aStub()

Todos 3 comentários

Pense em como isso ficaria no ES5 padrão. Cada função é exportada com um determinado nome no objeto de exportação, mas também pode ser referenciada internamente usando o nome da função. Estamos falando de duas referências diferentes. Ao fazer o stub, você está alterando a referência externa. A referência interna é mantida a mesma. Você não pode alterá-lo, exceto se criar um injetor de dependência explícito (como uma função setter para uso interno). Este não é um bug, mas um recurso do JavaScript.

existe alguma solução alternativa para isso? É bastante comum ter esse tipo de problema ao testar um arquivo nodejs.

Isso é abordado em nossa documentação, na seção como fazer:
http://sinonjs.org/how-to/link-seams-commonjs/

Esta página foi útil?
0 / 5 - 0 avaliações