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

tp5buhyn  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(192)

是否有办法在验收测试中更改控制器的属性值?

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

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

h7wcgrx3

h7wcgrx31#

您可以访问应用程序注册表并查找控制器。
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

piv4azn7

piv4azn72#

目前接受的答案由@ebrahim-pasbani是正确的任何Ember v 2.x应用程序正在使用旧版QUnit测试API的ember-cli-qunit@4.1.0或更低。
但请注意,如果您使用的是应用程序中提供的最新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,我可以推荐您阅读RobertJackson的introduction to the API、更新的official Testing Guides以及original RFC,以了解更多内容。

相关问题