javascript - Ember 辛烷 : Unit testing async action on controller

标签 javascript testing ember.js async-await ember-octane

具有以下 Controller 和测试:

应用程序/ Controller /application.js

import Controller from '@ember/controller';
import { action } from '@ember/object';

export default class ApplicationController extends Controller {
  flag = false;

  @action
  raiseFlag() {
    this.flag = true;
  }

  @action
  async raiseFlagAsync() {
    await new Promise(resolve => setTimeout(resolve, 1000));
    this.flag = true;
  }
}

测试/单元/ Controller /application-test.js

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';

module('Unit | Controller | application', function(hooks) {
  setupTest(hooks);

  test('it raises flag', function(assert) {
    let controller = this.owner.lookup('controller:application');
    assert.equal(controller.flag, false);
    controller.send('raiseFlag');
    assert.equal(controller.flag, true);
  });

  test('it raises flag asyncronously', async function(assert) {
    let controller = this.owner.lookup('controller:application');
    assert.equal(controller.flag, false);
    await controller.send('raiseFlagAsync');
    assert.equal(controller.flag, true);
  });
});

第一个测试用例通过。 第二个测试用例失败(异步测试用例)

等待异步操作的 ember-octane 方式是什么?

最佳答案

这里的技巧是不要使用send!一般来说,如果您需要在路由链中冒泡操作,我只会使用 send 。这是一个有点老的概念,并且没有返回值。因此,awaitcontroller.send无法工作。

您应该直接调用该操作:

test('it raises flag asyncronously', async function(assert) {
  let controller = this.owner.lookup('controller:application');
  assert.equal(controller.flag, false);
  await controller.raiseFlagAsync();
  assert.equal(controller.flag, true);
});

关于javascript - Ember 辛烷 : Unit testing async action on controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59881057/

相关文章:

java - 在android中测试, fragment 上的NullPointerException

c# - 如何在单元测试中从测试中传递 UserIdentity

google-chrome - 你如何以编程方式更改 chrome 上的默认下载目录?

ember.js - 使用 Ember 的全局通知 View

javascript - 将网站标题传递给应用程序模板

php - 自动提交动态选择表单

javascript - 如何检查某个类的特定值,然后通过跟踪代码管理器返回结果

javascript - 替换除第一个和最后一个以外的所有空格

javascript - 模板 "data"绑定(bind)提供值而不是可观察值

ruby-on-rails - 嵌套路由错误 Ember.JS 和 Rails