/ember-testing-library

Simple and complete Ember DOM testing utilities that encourage good testing practices.

Primary LanguageJavaScriptMIT LicenseMIT

@1024pix/ember-testing-library

The Ember Testing Library is a very lightweight solution for testing Ember components. It provides light utility functions on top of Ember built-in helpers, in a way that encourages better testing practices. Its primary guiding principle is:

  • The more your tests resemble the way your software is used, the more confidence they can give you.

For more info, please visit testing library guiding principles.

Compatibility

  • Ember.js v4.12 or above
  • Ember CLI v4.12 or above
  • Node.js v18 or above

Installation

ember install @1024pix/ember-testing-library

Usage

Ember testing library gives access to dom testing library queries in an Ember app. For more info on dom testing library queries, follow Testing library doc.

The current API methods that can be used are as follows:

  • getScreen
  • within
  • visit
  • render
  • clickByName
  • clickByText
  • fillByLabel
  • selectByLabelAndOption
  • selectOptionInRadioGroup
  • getByTextWithHtml
  • getAllByTextWithHtml
  • queryByTextWithHtml
  • queryAllByTextWithHtml
  • findByTextWithHtml
  • findAllByTextWithHtml

Please note that Ember Testing Library does not include the userEvent package, and that you should therefore use Ember built-in test helpers to interact with components and/or DOM nodes in integration/acceptance tests.

Acceptance test example:

import { visit } from '@1024pix/ember-testing-library';
import { click } from '@ember/test-helpers';

test('it should disable the button when clicked', async function (assert) {
  // given
  const screen = await visit('/home');

  // when
  const button = screen.getByRole('button', { name: 'Send message' });
  await click(button);

  // then
  assert.dom(button).isDisabled();
});

Integration test example:

import { render } from '@1024pix/ember-testing-library';
import { click } from '@ember/test-helpers';

test('it should disable the button when clicked', async function (assert) {
  // given
  const screen = await render(hbs`<LoginForm />`);

  // when
  const button = screen.getByRole('button', { name: 'Login' });
  await click(button);

  // then
  assert.dom(button).isDisabled();
});

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.