gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:42:00 25 4
gpt4 key购买 nike

具有以下 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仅当您需要在路由链中冒泡操作时。它有点旧概念,它没有返回值。所以await controller.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com