import { moduleForComponent, test } from 'ember-qunit'; /** * Renders component with default and optional props. * * @param context The test context * @param options Additional props */ function renderWithDefaults(context, options = {}) { const defaults = { foo: 'Hi from foo', bar: 'Hi from bar' }; const props = Object.assign(defaults, options); context.setProperties(props); const attrs = Object.keys(props).reduce((acc, key) => { return `${acc} ${key}=${key}`; }, ''); const componentDef = `{{my-component ${attrs}}}`; // Error: placeholders inside a tagged template string are not supported // context.render(hbs`${componentDef}`); context.render(componentDef); } moduleForComponent('my-component', 'Integration | Component | my-component', { integration: true }); // Test with only default props test('it shows foo', function(assert) { renderWithDefaults(this); assert.equal(this.$('.foo').text().trim(), 'Hi from foo'); }); // Test with some default props overriden test('it shows bar', function(assert) { renderWithDefaults(this, { bar: 'Hi from the bar' }); assert.equal(this.$('.bar').text().trim(), 'Hi from the bar'); }); // Test with optional props test('it shows greeting', function(assert) { renderWithDefaults(this, { name: 'Alice', greeting: 'Hello', }); assert.equal(this.$('.greeting').text().trim(), 'Hello Alice.'); }); // Test with optional prop test('it shows number', function(assert) { renderWithDefaults(this, { number: 3 }); assert.equal(this.$('.number').text().trim(), 'Your number is 3'); });