如何在验收测试中更改控制器的属性值?

时间:2017-03-15 06:57:35

标签: ember.js

有没有办法在验收测试中改变控制器的属性值?

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'));
});

例如,我想在运行测试之前设置输入的默认值。

2 个答案:

答案 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或更高版本或
  • 使用新的Ember v3.x应用

以下内容将通过利用公开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以获取更多背景信息。