import { expect, test } from 'vitest' import { render } from './utils' test('.toHaveAttribute', () => { const {queryByTestId} = render(` `) expect(queryByTestId('ok-button')).toHaveAttribute('disabled') expect(queryByTestId('ok-button')).toHaveAttribute('type') expect(queryByTestId('ok-button')).not.toHaveAttribute('class') expect(queryByTestId('ok-button')).toHaveAttribute('type', 'submit') expect(queryByTestId('ok-button')).not.toHaveAttribute('type', 'button') expect(queryByTestId('svg-element')).toHaveAttribute('width') expect(queryByTestId('svg-element')).toHaveAttribute('width', '12') expect(queryByTestId('ok-button')).not.toHaveAttribute('height') expect(() => expect(queryByTestId('ok-button')).not.toHaveAttribute('disabled'), ).toThrow() expect(() => expect(queryByTestId('ok-button')).not.toHaveAttribute('type'), ).toThrow() expect(() => expect(queryByTestId('ok-button')).toHaveAttribute('class'), ).toThrow() expect(() => expect(queryByTestId('ok-button')).not.toHaveAttribute('type', 'submit'), ).toThrow() expect(() => expect(queryByTestId('ok-button')).toHaveAttribute('type', 'button'), ).toThrow() expect(() => expect(queryByTestId('svg-element')).not.toHaveAttribute('width'), ).toThrow() expect(() => expect(queryByTestId('svg-element')).not.toHaveAttribute('width', '12'), ).toThrow() expect(() => // @ts-expect-error invalid signature expect({thisIsNot: 'an html element'}).not.toHaveAttribute(), ).toThrow() // Asymmetric matchers expect(queryByTestId('ok-button')).toHaveAttribute( 'type', expect.stringContaining('sub'), ) expect(queryByTestId('ok-button')).toHaveAttribute( 'type', expect.stringMatching(/sub*/), ) expect(queryByTestId('ok-button')).toHaveAttribute('type', expect.anything()) expect(() => expect(queryByTestId('ok-button')).toHaveAttribute( 'type', expect.not.stringContaining('sub'), ), ).toThrow() })