Simplify the process of selecting components within integration tests.
We do this by providing a simple API for getting component elements, instances and jQuery selectors.
This works by reopening Component to add a couple of data-test-* attributes to every component within the testing environment.
We often need to target components within tests. So far we've done this by either manually adding a special .test-* class name or data-test-* attribute to the component. However, these are hard to manage and pollute production markup with unnecessary attributes or classes. By providing a simple API for accessing components by name or, optionally, a testAttr, we can simplify our tests.
// in test-helper.js
import getComponent from 'ember-get-component';
getComponent.init();import getComponent from 'ember-get-component';getComponent.elementsByName('widget-item');getComponent.elementByTestAttr('specialWidget');Note, these return only the instance for the first matching element.
getComponent.instanceByName('widget-item');
getComponent.instanceByTestAttr('specialWidget');import WidgetItem from 'wherever';
getComponent.instanceByConstructor(WidgetItem);const WIDGET_SELECTOR = getComponent.selectorByName('widget-item');
const SPECIAL_WIDGET_SELECTOR = getComponent.selectorByTestAttr('specialWidget');The debugger provides a list of components by name and testAttr as well as cut-and-paste-ready mocha assertions for testing visibility. Use it as a starting point in your tests.
getComponent.debug();- Have debug group the output by component name and testId while providing a count.
- Consider adding a second param to
elementsByNameandelementsByAttrto provide jQuery scope.
How can this be better? Leave us feeback in an issue or, better yet, send us a Pull Request.
