@revoloo/cypress6
Version:
Cypress.io end to end testing tool
93 lines (69 loc) • 2.73 kB
JSX
import React from 'react'
import { render } from 'react-dom'
import { Dropdown } from '../../'
describe('<Dropdown />', () => {
let defaultProps
beforeEach(() => {
defaultProps = {
chosen: { name: 'First' },
others: [{ name: 'Second' }, { name: 'Third' }],
keyProperty: 'name',
renderItem: ({ name }) => name,
onSelect: () => {},
}
cy.visit('dist/index.html')
cy.viewport(400, 600)
})
it('displays chosen option and hides others', () => {
cy.render(render, <Dropdown {...defaultProps} />)
cy.contains('First').should('be.visible')
cy.contains('Second').should('not.be.visible')
cy.contains('Third').should('not.be.visible')
})
it('shows others after clicking chosen option', () => {
cy.render(render, <Dropdown {...defaultProps} />)
cy.contains('First').click()
cy.contains('Second').should('be.visible')
cy.contains('Third').should('be.visible')
})
it('calls onSelect after clicking option', () => {
const onSelect = cy.stub()
cy.render(render, <Dropdown {...defaultProps} onSelect={onSelect} />)
cy.contains('First').click()
cy.contains('Second').click().then(() => {
expect(onSelect).to.be.calledWith({ name: 'Second' })
})
})
it('applies className to container', () => {
cy.render(render, <Dropdown {...defaultProps} className="custom-class" />)
cy.get('.dropdown').should('have.class', 'custom-class')
})
it('renders item as specified by renderItem prop', () => {
cy.render(render, <Dropdown {...defaultProps} renderItem={({ name }) => <span>{name}</span>} />)
cy.contains('First').children().should('match', 'span')
cy.contains('Second').should('match', 'span')
cy.contains('Third').should('match', 'span')
})
it('renders caret if there are items', () => {
cy.render(render, <Dropdown {...defaultProps} />)
cy.get('.dropdown-caret')
})
it('does not render caret if there are no items', () => {
cy.render(render, <Dropdown {...defaultProps} others={[]}/>)
cy.get('.dropdown-caret').should('not.exist')
})
it('disables if disabled specified and does not render options or caret', () => {
cy.render(render, <Dropdown {...defaultProps} disabled/>)
cy.contains('First').should('have.class', 'disabled').click({ force: true })
cy.get('.dropdown li').should('not.exist')
cy.get('.dropdown-caret').should('not.exist')
})
it('closes dropdown when clicking outside of it', () => {
cy.document().then((doc) => {
cy.render(render, <Dropdown {...defaultProps} document={doc} />)
})
cy.contains('First').click()
cy.get('body').click()
cy.contains('Second').should('not.be.visible')
})
})