Function.prototype.bind()
(вроде) решает это!
//The convention we will use here is that developers shouldn't use the
// _underscore methods in production.
export const _a = function(_b, ...numbers) {
return numbers.map(n => _b(n));
};
export const b = function(n) {
return n+1;
}
export const a = _a.bind(null, b);
console.log(a(1,2,3)) //[2,3,4]
Это также имеет то преимущество, что вы скрываете введенную функцию от разработчика.
Теперь, как бы вы это проверили?
Вы должны протестировать метод _underscore, так что-то вроде:
import { _a } from "../functions";
describe("_a", () => {
it("_a(1,2,3) calls _b three times.", () => {
const mockFn = jest.fn();
const a = _a.bind(null, mockFn);
a(1, 2, 3);
expect(mockFn.mock.calls).toHaveLength(3);
})
});
Если вам интересно - я запустил репозиторий Github с более конкретным примеромэтот подход здесь .
Если у кого-то есть более аккуратный способ сделать это - я весь в ушах.