Skip to content

Commit da3e65d

Browse files
author
Robert Jackson
committed
Expose importable helper functions.
These functions can be used instead of repeating `this.` throughout the testing code. Example: ```js import { module, test } from 'qunit'; import { setupRenderingTest, render, element } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; module('x-foo', function(hooks) { setupRenderingTest(hooks); test('renders', async function(assert) { assert.expect(1); await render(hbs`{{pretty-color name="red"}}`); assert.equal(element.querySelector('.color-name').textContent, 'red'); }); }); ```
1 parent 79af2d8 commit da3e65d

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

addon-test-support/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ export { default as TestModuleForModel } from './legacy-0-6-x/test-module-for-mo
77
export { setResolver } from './resolver';
88
export { default as setupContext, getContext, setContext, unsetContext } from './setup-context';
99
export { default as teardownContext } from './teardown-context';
10-
export { default as setupRenderingContext } from './setup-rendering-context';
10+
export {
11+
default as setupRenderingContext,
12+
render,
13+
clearRender,
14+
element,
15+
} from './setup-rendering-context';
1116
export { default as teardownRenderingContext } from './teardown-rendering-context';
1217

1318
import Ember from 'ember';

addon-test-support/setup-rendering-context.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,34 @@ import { run, next } from '@ember/runloop';
33
import { Promise } from 'rsvp';
44
import Ember from 'ember';
55
import global from './global';
6+
import { getContext } from './setup-context';
67

78
export const RENDERING_CLEANUP = Object.create(null);
89

10+
export function render(template) {
11+
let context = getContext();
12+
13+
if (!context || typeof context.render !== 'function') {
14+
throw new Error('Cannot call `render` without having first called `setupRenderingContext`.');
15+
}
16+
17+
return context.render(template);
18+
}
19+
20+
export function clearRender() {
21+
let context = getContext();
22+
23+
if (!context || typeof context.clearRender !== 'function') {
24+
throw new Error(
25+
'Cannot call `clearRender` without having first called `setupRenderingContext`.'
26+
);
27+
}
28+
29+
return context.clearRender();
30+
}
31+
32+
export let element = undefined;
33+
934
/*
1035
* Responsible for:
1136
*
@@ -22,6 +47,7 @@ export default function(context) {
2247
RENDERING_CLEANUP[guid] = [
2348
() => {
2449
rootTestElement.innerHTML = fixtureResetValue;
50+
element = undefined;
2551
},
2652
];
2753

@@ -52,7 +78,7 @@ export default function(context) {
5278
outlets: {},
5379
};
5480

55-
let element, hasRendered;
81+
let hasRendered;
5682
let templateId = 0;
5783

5884
if (hasOutletTemplate) {

tests/unit/setup-rendering-context-test.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import {
88
setupRenderingContext,
99
teardownContext,
1010
teardownRenderingContext,
11+
render,
12+
clearRender,
13+
element,
1114
} from 'ember-test-helpers';
1215
import hasEmberVersion from 'ember-test-helpers/has-ember-version';
1316
import hasjQuery from '../helpers/has-jquery';
@@ -303,4 +306,31 @@ module('setupRenderingContext', function(hooks) {
303306
assert.equal(this.get('foo'), 'updated!');
304307
assert.equal(this.get('bar'), 'updated bar!');
305308
});
309+
310+
test('imported `render` can be used instead of this.render', async function(assert) {
311+
await render(hbs`yippie!!`);
312+
313+
assert.equal(this.element.textContent, 'yippie!!');
314+
});
315+
316+
test('imported `element` can be used instead of this.element', async function(assert) {
317+
await this.render(hbs`yippie!!`);
318+
319+
assert.equal(element.textContent, 'yippie!!');
320+
assert.equal(element, this.element);
321+
});
322+
323+
test('imported clearRender can be used instead of this.clearRender', async function(assert) {
324+
let testingRootElement = document.getElementById('ember-testing');
325+
326+
await this.render(hbs`<p>Hello!</p>`);
327+
328+
assert.equal(this.element.textContent, 'Hello!', 'has rendered content');
329+
assert.equal(testingRootElement.textContent, 'Hello!', 'has rendered content');
330+
331+
await clearRender();
332+
assert.equal(this.element, undefined, 'this.element is reset');
333+
334+
assert.equal(testingRootElement.textContent, '', 'content is cleared');
335+
});
306336
});

0 commit comments

Comments
 (0)