У меня есть метод компонента React, который возвращает и другой компонент.Есть ли Jest matcher для проверки этого?
Например, мой компонент имеет следующий метод:
class App extends React.Component {
selectDashboardView(dashboard) {
if (!dashboard) {
return null;
}
switch (dashboard) {
case DASHBOARD_TYPE.advisor:
return <AdvisorDashboard />;
case DASHBOARD_TYPE.advisor_fund:
return <AdvisorFundDashboard />;
case DASHBOARD_TYPE.portfolio:
return <PortfolioDashboard />;
case DASHBOARD_TYPE.investor_profile:
return <InvestorProfileDashboard />;
case DASHBOARD_TYPE.investment:
return <InvestmentDashboard />;
default:
return null;
}
}
...
}
Я бы хотел написать такой тест (очевидно, этонедопустимый тест):
describe('App', () => {
test('selects proper dashboard', () => {
const wrapper = shallow(<App />);
const instance = wrapper.instance();
expect(instance.selectDashboardView('advisor')).toMatch(<AdvisorDashboard />);
});
});
Обновление: Может быть важно отметить, что эти компоненты подключены к Redux.При тестировании <App />
я импортировал неподключенный компонент, то же самое с <AdvisorDashboard />
и т. Д. Я смог решить проблему с помощью следующего кода:
describe('App', () => {
test('selects proper dashboard', () => {
const wrapper = shallow(<App setDashboard={mockFn} setIsAdvisor={mockFn} />);
const instance = wrapper.instance();
expect(instance.selectDashboardView('advisor').type.WrappedComponent).toEqual(AdvisorDashboard);
expect(instance.selectDashboardView('investor_profile').type.WrappedComponent).toEqual(InvestorProfileDashboard);
});
});