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()
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/