Sinon доступ к исходному телу функции

Я тестирую компоненты React с sinon chai и энзимом. Я пишу плагин с HOC, который будет создавать новый компонент React.

Я не уверен, что пользователь передаст HOC, поэтому я хочу проверить, является ли это компонентом React или нет. Единственный (уродливый) способ, который я смог найти, - это адаптироваться к этому ответу StackOverflow

export function isClassComponent(component) {
  return (
    typeof component === 'function' && !!component.prototype.isReactComponent
  )
}

export function isFunctionComponent(component) {
  return (
    typeof component === 'function' && String(component).includes('.createElement')
  );
}

export function isReactComponent(component) {
  return !!(isClassComponent(component) || isFunctionComponent(component))
}

Это нечеткий способ проверить, является ли компонент компонентом React или нет.

Проблема в том, что мой компонент - шпион Sinon.

const FnChild = (props) => (<div id="child-fn">{props.children}</div>);
const ChildSpy = spy(FnChild);

Теперь тестирование isReactComponent(ChildSpy) не удастся, потому что isFunctionComponent фактически проверит тело функции, а в случае ChildSpy больше не будет телом исходной функции.

Я знаю, что не должен полагаться на функции тела, но это лучший способ, который я мог найти для своей цели.

В любом случае, есть ли способ получить доступ к оригинальному телу шпиона? Как в таком случае передать его своему isFunctionComponent?


person Leonardo    schedule 12.04.2017    source источник
comment
Глядя на реализацию шпионов в Sinon, похоже, нет способа получить доступ к исходной функции (или ее телу).   -  person robertklep    schedule 12.04.2017