有没有办法在验收测试中改变控制器的属性值?
test('should add new post', function(assert) {
visit('/posts/new');
fillIn('input.title', 'My new post');
click('button.submit');
andThen(() => assert.equal(find('ul.posts li:first').text(), 'My new post'));
});
例如,我想在运行测试之前设置输入的默认值。
答案 0 :(得分:4)
您可以访问应用程序注册表并查找控制器。
moduleForAcceptance
设置应用程序。
test('should add new post', function(assert) {
let controller = this.application.__container__.lookup('controller:posts/new');
controller.set('val', 'default');
visit('/posts/new');
fillIn('input.title', 'My new post');
click('button.submit');
andThen(() => assert.equal(find('ul.posts li:first').text(), 'My new post'));
});
请查看this twiddle
答案 1 :(得分:3)
@ ebrahim-pasbani目前接受的答案对于ember-cli-qunit@4.1.0
或更低版本使用旧版QUnit Testing API的任何Ember v 2.x应用都是正确的。
但请注意,如果您使用的是应用程序中最新的QUnit Testing API,那么
ember-cli-qunit@4.2.0
或更高版本或以下内容将通过利用公开owner
API和setupApplicationTest
帮助来实现:
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { visit, fillIn, click, find } from '@ember/test-helpers';
import { run } from '@ember/runloop';
module('Acceptance | posts', function(hooks) {
setupApplicationTest(hooks);
test('should add new post', async function(assert) {
await run(() => this.owner.lookup('controller:posts/new').set('val', 'default'));
await visit('/posts/new');
await fillIn('input.title', 'My new post');
await click('button.submit');
assert.equal(find('ul.posts li:first').textContent.trim(), 'My new post');
});
});
如果您还不熟悉新的QUnit Testing API,我建议您阅读Robert Jackson的introduction to the API,更新的official Testing Guides以及original RFC以获取更多背景信息。