Skip to content

Instantly share code, notes, and snippets.

@w1shen
Last active January 14, 2019 18:09
Show Gist options
  • Save w1shen/e69f6ce0ffeee33dd19b665186836147 to your computer and use it in GitHub Desktop.
Save w1shen/e69f6ce0ffeee33dd19b665186836147 to your computer and use it in GitHub Desktop.
New Twiddle
import { run } from '@ember/runloop';
export default function destroyApp(application) {
run(application, 'destroy');
}
import Ember from 'ember';
import Application from '../../app';
import config from '../../config/environment';
const { run } = Ember;
const assign = Ember.assign || Ember.merge;
export default function startApp(attrs) {
let application;
let attributes = assign({rootElement: "#test-root"}, config.APP);
attributes.autoboot = true;
attributes = assign(attributes, attrs); // use defaults, but you can override;
run(() => {
application = Application.create(attributes);
application.setupForTesting();
application.injectTestHelpers();
});
return application;
}
import { render, click, find, findAll } from '@ember/test-helpers';
import { setupRenderingTest } from 'ember-qunit';
import { module, test } from 'qunit';
import hbs from 'htmlbars-inline-precompile';
import Component from '@ember/component';
// -------------------------------------------------------------------------
// Component
const TheComponent = Component.extend({
message: null,
actions: {
// async tasks after user interactions (click, focus, mouseover...)
doSomething() {
setTimeout(() => {
this.set('message', "Time's up! Let's do this");
}, 100);
}
},
didInsertElement() {
this._super(...arguments);
// async tasks after loading
setTimeout(() => {
this.set('message', 'To Be or Not to Be');
}, 100);
}
});
// -------------------------------------------------------------------------
// Template
const TheTemplate = hbs`
<div id="my-exam1">
<button id="do-something" {{action "doSomething"}}>Click me</button>
<p id="message">{{message}}</p>
</div>
`;
// -------------------------------------------------------------------------
// Test
module('Integration | Component | my-exam1', function(hooks) {
setupRenderingTest(hooks);
// Just a setup for demo. Please ignore it.
hooks.beforeEach(function(assert) {
this.owner.register('component:my-exam1', TheComponent);
this.owner.register('template:components/my-exam1', TheTemplate);
});
// ember test-helpers only wait for the "settledness" metrics:
// https://github.com/emberjs/ember-test-helpers/blob/master/API.md#getsettledstate
// setTimeout is not belong to the "settledness" metrics.
// So it will NOT wait setTimeout even we use await.
test('it renders do-something button', async function(assert) {
await render(hbs`{{my-exam1}}`);
assert.equal(findAll('#do-something').length, 1);
});
test('do-something button works', async function(assert) {
await render(hbs`{{my-exam1}}`);
await click('#do-something');
// Every DOM interaction helper returns a promise that resolves when settled.
// If you use setTimeout, those helpers won't work for you.
// https://github.com/emberjs/ember-test-helpers/blob/master/API.md#dom-interaction-helpers
assert.equal(find('#message').textContent.trim(), "Time's up! Let's do this");
});
// Without waiting the pending timer correctly,
// the test will fail other tests while the test suite is running.
test('Not my fault. I am so well behaved', function(assert) {
assert.ok(true);
});
});
import Application from '../app';
import config from '../config/environment';
import { setApplication } from '@ember/test-helpers';
import { start } from 'ember-qunit';
import { assign } from '@ember/polyfills';
let attributes = assign({ rootElement: '#ember-testing', autoboot: false }, config.APP);
setApplication(Application.create(attributes));
start();
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": true
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2",
"ember-lifeline": "3.1.1",
"ember-fetch": "6.4.0",
"ember-cli-pretender": "3.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment