* hacky way to update snapshots * new hack to update snapshots * trying again * hacky fix * ci: snapshots * ci: snapshots * snapshots * mas updates * update spec API * fix test * fix test * update * update test * fix test * update plugin * update spec * webpack optinos * Update launchpad tests * fix screenshot paths * updated snapshot * change pattern * guard * fix smoke test * patch code coverage * update percy config * fix specs * try updating example project * update snapshots * remove old test * remove snapshot hack * add back appveyor * remove old code * update snapshot * Fix tests * wip * revert snapshot * reverted all snaps * remove only * remove commnet * remove old code * reverted file * lint * revert video compression spec * update snapshot * update spec path logic * update snap * updated snap * snaps * snaps * fix spec * rename ignoreTestFiles to ignoreSpecPattern * update screenshot dir for runner-ct * update deprecations * update * upate * fix test * update snaps * update snap * updating snap * added missing snaps * updated cypress run mode integration spec * electron snapshot * update default * rename integration->e2e * rename integration->e2e in packages * spec.ts -> cy.ts * spec.ts -> cy.ts * _spec.js -> .cy.js * .spec.js -> .cy.js * .spec.js -> .cy.js * update config * update config * update * update spec ext * update config * update config * ensure newly scaffold specs are cached * fix launchpad spec * types * update test * transpile based on spec pattern * add back example * remove unnecessary async and nodeVersion * spec.tsx -> cy.tsx * update stop-only config * exclude CT from E2E * removed old test * update spec pattern in angular * update spec pattern in design system * update all specs npm npm/react * update spec name * update spec patterns * remove old script * update tests path * update config * fix test * update snapshots * update examples * update ignore patterns * update snapshots * unit tests * update tests * patch code coverage * revert spec name * rename a lot of speces * update * update spec ext * update spec * update spec * update spec ext * update lint * update rules * update lint * snaps * update spec dir * update paths * remove unused pluginsfile config opt * update smoke test * update create cypress tests * update gitignore * update types * update paths * update spe * update test * update all snaps * update tests * update http request spec * update spec file names * snaps * update snaps * updated snaps * update snaps * spacing * spacing * spacing * spacing * fix perf spec * update * update * revert * update * snaps * snaps * rename spec * update snaps * snapshots * update tests * update tests * update * fix * update test projects * update * updating * update run-ct test * update spec pattern and add defensive check around platform * fix system test script * update snap * snaps * update test * update spe * update for FF * ff * remove unused feature flag * added tests * fix react example * update test * update config * update test projects * update snapshots * correctly remove private prefix on darwin * fix types * rename integration -> e2e * update config * updatec onfig * fixing app scaffold integration tests * remove code * exclude e2e specs from CT * update snapshot * integration->e2e * update path for test file in ts project * update schematic * use updated branch for CI * update config * update config * revert some changes * remove built code * revert changes * update gitignore * include test spec * update scaffold script * wip: renames * script * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * mass rename * rename * rename * fix angular * update spec in create cypress tests * remove old file * fix tests * access specPattern in a more idiomatic fashion * do not duplicate variable * pass correct params to findSpec in files controller * add comment explaining spec finding * remove reference to old file that no longer exist * resolve conflicts * fix types * transpile cypress dir * update circle ymlg * update spec pattern for example project * supportFile: false * fix circle yml * update test glob * rename some specs to use correct .cy ext * more ext renames * rename spec * update extensions * update extensions * update specs Co-authored-by: estrada9166 <estrada9166@hotmail.com> Co-authored-by: Emily Rohrbough <emilyrohrbough@users.noreply.github.com>
Enzyme examples
This folder shows several examples from Enzyme docs.
In general if you are migrating from Enzyme to @cypress/react:
- there is no shallow mounting, only the full mounting. Thus
@cypress/reacthasmountwhich is similar to the Enzyme'srender. It renders the full HTML and CSS output of your component. - you can mock children components if you want to avoid running "expensive" components during tests
- the test is running as a "mini" web application. Thus if you want to set a context around component, then set the context around the component
setState
If you want to change the component's internal state, use the component reference. You can get it by using the special property ref when mounting.
// get the component reference using "ref" prop
// and place it into the object for Cypress to "wait" for it
let c = {}
mount(<Foo id="foo" foo="initial" ref={i => (c.instance = i)} />)
cy.wrap(c)
.its('instance')
.invoke('setState', { count: 10 })
See state-spec.js file.
setProps
There is no direct implementation of setProps. If you want to see how the component behaves with different props:
it('mounts component with new props', () => {
mount(<Foo id="foo" foo="initial" />)
cy.contains('initial').should('be.visible')
mount(<Foo id="foo" foo="second" />)
cy.contains('second').should('be.visible')
})
If you want to reuse properties, you can even clone the component
it('mounts cloned component', () => {
const cmp = <Foo id="foo" foo="initial" />
mount(cmp)
cy.contains('initial').should('be.visible')
const cloned = Cypress._.cloneDeep(cmp)
// change a property, leaving the rest unchanged
cloned.props.foo = 'second'
mount(cloned)
cy.contains('.foo', 'second').should('be.visible')
})
See props-spec.js file.
context
Enzyme's mount method allows passing the React context as the second argument to the JSX component like SimpleComponent below.
function SimpleComponent(props, context) {
const { name } = context
return <div>{name || 'not set'}</div>
}
Since the above syntax is deprecated, @cypress/react does not support it. Instead use createContext and Context.Provider to surround the mounted component, just like you would do in a regular application code.
mount(
<SimpleContext.Provider value={{ name: 'test context' }}>
<SimpleComponent />
</SimpleContext.Provider>,
)
Instead of setting a new context, mount the same component but surround it with a different context provider
const cmp = <SimpleComponent id="0x123" />
mount(
<SimpleContext.Provider value={{ name: 'first context' }}>
{cmp}
</SimpleContext.Provider>,
)
// same component, different provider
mount(
<SimpleContext.Provider value={{ name: 'second context' }}>
{cmp}
</SimpleContext.Provider>,
)
See context-spec.js for more examples.