Skip to content

Instantly share code, notes, and snippets.

@w1shen
Last active October 14, 2019 05:25
Show Gist options
  • Save w1shen/8d2f62a60430cd47508f0ce0ad99ce6c to your computer and use it in GitHub Desktop.
Save w1shen/8d2f62a60430cd47508f0ce0ad99ce6c 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 setupLifelineValidation from 'ember-lifeline/test-support';
import Component from '@ember/component';
import { runTask, runDisposables } from 'ember-lifeline';
// -------------------------------------------------------------------------
// Component
const TheComponent = Component.extend({
message: null,
actions: {
doSomething() {
runTask(this, () => {
// ember-lifeline checks if this component instance still exists for you.
this.set('message', "Time's up! Let's do this");
}, 100);
}
},
didInsertElement() {
this._super(...arguments);
runTask(this, () => {
// ember-lifeline checks if this component instance still exists for you.
this.set('message', 'To Be or Not to Be');
}, 100);
},
willDestroy() {
this._super(...arguments);
// Removing this line will invalidate the lifeline validation
runDisposables(this);
}
});
// -------------------------------------------------------------------------
// 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) {
setupLifelineValidation(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);
});
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');
assert.equal(find('#message').textContent.trim(), "Time's up! Let's do this");
});
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": false
},
"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