Javascript Ember Octane:单元测试控制器上的异步操作

Javascript Ember Octane:单元测试控制器上的异步操作,javascript,testing,ember.js,async-await,ember-octane,Javascript,Testing,Ember.js,Async Await,Ember Octane,具有以下控制器和测试: app/controllers/application.js 从“@ember/Controller”导入控制器; 从'@ember/object'导入{action}; 导出默认类ApplicationController扩展控制器{ flag=false; @行动 raiseFlag(){ this.flag=true; } @行动 async raiseFlagAsync(){ 等待新的承诺(resolve=>setTimeout(resolve,1000)); t

具有以下控制器和测试:

app/controllers/application.js

从“@ember/Controller”导入控制器;
从'@ember/object'导入{action};
导出默认类ApplicationController扩展控制器{
flag=false;
@行动
raiseFlag(){
this.flag=true;
}
@行动
async raiseFlagAsync(){
等待新的承诺(resolve=>setTimeout(resolve,1000));
this.flag=true;
}
}
测试/单元/控制器/application-test.js

从'quonit'导入{module,test};
从'ember qunit'导入{setupTest};
模块(‘单元|控制器|应用’、功能(挂钩){
设置测试(挂钩);
测试('它引发标志',函数(断言){
让controller=this.owner.lookup('controller:application');
assert.equal(controller.flag,false);
controller.send('raiseFlag');
assert.equal(controller.flag,true);
});
test('it异步地引发标志',异步函数(assert){
让controller=this.owner.lookup('controller:application');
assert.equal(controller.flag,false);
等待controller.send('raiseFlagAsync');
assert.equal(controller.flag,true);
});
});
第一个测试用例通过。 第二个测试用例失败(异步测试用例)


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

不确定为什么很难找到这些信息,可能是糟糕的SEO

从'@ember/test helpers'导入{waitill};
test('it异步地引发标志',异步函数(assert){
让controller=this.owner.lookup('controller:application');
assert.equal(controller.flag,false);
send('raiseFlagAsync');
等待等待直到(()=>controller.flag===true);
});

如果有人想出一个更像余烬的答案,我会接受这一次,而不是这里的诀窍是不要使用
发送
!通常,只有当您需要在路由链中创建气泡操作时,我才会使用
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);
});

当解决方案太明显而看不见时。。。谢谢