i have a component which contains a component that is being render based on an if statement. the statement if false adds a css class to the container component, and not render the inner component and if true otherwise. the class is being added or not added in the right way. The inner component on the other hand is not being render in the snapshot no matter what. the component works fine in the browser.
this is the container:
<React.Fragment>
<div className={containerClasses}>
<div className="conditions-types">
<TableHeaderCell title={texts.bookingReferenceInformation1}/>
{isTrue(displayFlightBookingReference) && <TableHeaderCell title={texts.bookingReferenceInformation2}/>}
{isTrue(displayBookingDate) && <TableHeaderCell title={texts.bookingReferenceInformation3}/>}
<TableHeaderCell title={texts.bookingReferenceInformation4}/>
</div>
<div className="condition-values">
<TableCell value={reservation.bookingCode}/>
{isTrue(displayFlightBookingReference) && <TableCell value={bookingNumber}/>}
{isTrue(displayBookingDate) && <TableCell value={getHolidaySummaryDate(reservation.datUserCreated)}/>}
<TableCell value={departureDateTime}/>
</div>
</div>
//following is the missing component
{isTrue(displayCheckInButton) && <CheckInButton btnText={texts.checkInNow} links={links}/>}
</React.Fragment>
this is the inner component:
const CheckInButton = ({btnText ='' ,links= []}) =>
<div className="btn-section thankyouSection">
<div className="checkin-now-btn">
<a data-hook="checkInNow" target="_blank" itemProp="url" href={links && links.CheckInNow}>{btnText}</a>
</div>
</div>;
when debugging the const holding the value for the if statement "displayCheckInButton", it came out it is true when needed. the component should render the inner component.
the test:
it(`should render BookingReference component with check-in button`, () => {
const bookingReferenceComponent = mount(<BookingReference {...props} />);
const wrapper = mount(<BookingReference {...props} />);
expect(wrapper.find('.btn-section').length).toEqual(1);
expect(bookingReferenceComponent).toMatchSnapshot();
});
I tried wrapper to see if it contains the component. the wrapper does find one element with the class of the inner component as it should yet the snap shot remains:
exports[`BookingReference Tests should render BookingReference component
with check-in button 1`] = `
<div class="condition-table thankyouSection">
<div class="conditions-types">
<div class="type">
<div></div>
</div>
<div class="type">
<div></div>
</div>
</div>
<div class="condition-values">
<div class="value">ABCDE12345</div>
<div class="value">1 June 2018</div>
</div>
// in here should be the missing component
</div>
`;
hope i gave enough info
solution:
return (
//instead of fragment i tried div
<div>
<div className={containerClasses}>
<div className="conditions-types">
<TableHeaderCell title={texts.bookingReferenceInformation1}/>
{isTrue(displayFlightBookingReference) && <TableHeaderCell title={texts.bookingReferenceInformation2}/>}
{isTrue(displayBookingDate) && <TableHeaderCell title={texts.bookingReferenceInformation3}/>}
<TableHeaderCell title={texts.bookingReferenceInformation4}/>
</div>
<div className="condition-values">
<TableCell value={reservation.bookingCode}/>
{isTrue(displayFlightBookingReference) && <TableCell value={bookingNumber}/>}
{isTrue(displayBookingDate) && <TableCell value={getHolidaySummaryDate(reservation.datUserCreated)}/>}
<TableCell value={departureDateTime}/>
</div>
</div>
{isTrue(displayCheckInButton) && <CheckInButton btnText={texts.checkInNow} links={links}/>}
</div>
);
thx everyone
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With