Nie mogę znaleźć sposobu na wywołanie funkcji wywoływanej z tego samego modułu, dla której zdefiniowano tę funkcję (kod pośredniczący nie działa). Oto przykład:Funkcja modułu zwanego wywołanego z tego samego modułu
myModule.js:
'use strict'
function foo() {
return 'foo'
}
exports.foo = foo
function bar() {
return foo()
}
exports.bar = bar
myModule.test.js:
'use strict'
const chai = require('chai')
const sinon = require('sinon')
chai.should()
const myModule = require('./myModule')
describe('myModule',() => {
describe('bar',() => {
it('should return foo',() => {
myModule.bar().should.equal('foo') // succeeds
})
describe('when stubbed',() => {
before(() => {
sinon.stub(myModule, 'foo').returns('foo2') // this stub seems ignored
})
it('should return foo2',() => {
myModule.bar().should.equal('foo2') // fails
})
})
})
})
Przypomina mi Java statycznych funkcji, które nie są stubbable (prawie).
Każdy pomysł, jak osiągnąć to, co próbuję zrobić? Wiem, że wyodrębnianie foo
w innym module będzie działało, ale to nie jest to, co próbuję tutaj zrobić. Jestem również świadomy, że wywołanie metody foo
w metodzie bar
ze słowem kluczowym this
również zadziała, jestem zaintrygowany użyciem w tym kontekście this
(ponieważ nie używam OOP).
Świetnie, dzięki. Wciąż trochę brzydko używać "eksportu", ponieważ działa tak samo jak "to", ale to wystarczy. Używanie 'this' w statycznym kontekście wprawiało mnie w zakłopotanie. – Simon
Witaj, mój przyjacielu! –
Co zrobić, jeśli nie możesz zmienić kodu źródłowego? – nbkhope