Вы не можете получить доступ к переменным или функциям scoped внутри другой функции в JavaScript. Если вы явно не открываете их, возвращая их из этой функции или экспортируя их из модуля. Речь идет не о Jest, а о том, как это работает в JavaScript.
jest.spyOn(parentFunction, "innerFunction")
Приведенная выше строка кода указывает Jest, что функция innerFunction
установлена как свойство объекта parentFunction
, но это не так. Фактически innerFunction
- это функция в области внутри parentFunction
, к которой нельзя получить доступ вне области действия parentFunction
. Если вы не вернете это явно или не определите его в области действия уровня модуля, а затем экспортируете его.
Но внутренние детали или детали реализации таких внутренних функций не должны быть представлены, но если это необходимо, чтобы оно было помечено как таковое с использованием _
перед его именем, возьмите следующий пример:
//scoped to the module
const _innerFunction = () => {
//that does stuff
}
//scoped to the module
const _anotherInnerFunction = () => {
//that does more stuff
}
//exported as a public API
const anotherFunction = () => {
_anotherInnerFunction()
}
const publicApi = {
anotherFunction,
// expose the private functions for unit tests
_innerFunction,
_anotherInnerFunction
}
export default publicApi;
Затем в вашем тестовом примере Jest:
import publicApi from "myfile"
it("should call anotherFunction", () => {
const anotherFunctionSpy = jest.spyOn(publicApi, "anotherFunction")
//..etc
expect(anotherFunctionSpy ).toHaveBeenCalled()
})
it("should call _innerFunction", () => {
const innerFunctionSpy = jest.spyOn(publicApi, "_innerFunction")
//..etc
expect(innerFunctionSpy ).toHaveBeenCalled()
})