我正在将 Sinon 与 Ember.js 并发任务一起使用,并试图在测试中对任务进行存根。
代码看起来像这样:
组件.ts
文件:
import Component from '@glimmer/component';
import { TaskGenerator, TaskInstance } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { taskFor } from 'ember-concurrency-ts';
export default class Container extends Component<Args> {
@task *myTask(): TaskGenerator<Data> {
const response: Data = yield json('someURL'); //json() returns a JSON object from a request to someURL
return response;
}
get task(): TaskInstance<Data> | null {
const task = taskFor(this.myTask);
return task.last ? task.last : task.perform();
}
@action
someMethod(): void {
const task = taskFor(this.myTask);
task.perform();
}
}
组件测试文件中的相关测试:
...
module('Integration | Component | container', function(hooks){
test('some test', async function(this: Context, assert) {
await render(hbs`
<Container @someMethod={{@someArgument}} as |c| >
// some code that uses c
</Container>
`);
}
我将如何存根 myTask 任务?我基本上希望拥有它,以便能够手动控制来自 myTask 的响应,因此不必在测试中进行 HTTP 响应。