亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Ember.js 中存根任務?

如何在 Ember.js 中存根任務?

烙印99 2024-01-18 16:39:52
我正在將 Sinon 與 Ember.js 并發任務一起使用,并嘗試在測試中存根該任務。代碼如下所示:組件文件:.tsimport 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 響應。
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

我會用你的模擬任務覆蓋真實的任務來擴展你的測試文件中的組件。


class TestContainer extends Container {

  @task *myTask(): TaskGenerator<Data> {

    return someMockData;

  }

}


// ...


hooks.beforeEach(function() {

  this.owner.register('component:container', TestContainer);

});


查看完整回答
反對 回復 2024-01-18
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

我不知道有什么方法可以模擬組件中的單個任務進行測試。當涉及網絡時,我會伸手去尋找建立在偽裝者之上的?ember-cli-mirage。Mirage 在處理 ember-data 模型時非常出色,也可用于處理模擬任何網絡請求。如果您不使用 ember-data,您可能只想使用偽裝者或調查非框架?Mirage.js。

通過模擬網絡并返回預制數據,您將在測試組件時對測試進行相同的控制。我真的很喜歡這種方法,并且發現它多年來一直非??煽亢头€定。


查看完整回答
反對 回復 2024-01-18
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

在我的項目中,我確實有使用 sinon 的任務存根。它的構建方式與你的設置略有不同,但也許你可能會得到一些靈感。


所以我在我的組件中有這個任務


  @(task(function* () {

      yield this.exportxls.asXls.perform(someArg);

  })) downloadXls;

此方法在服務中asXls


  @(task(function* (mapping) {

    // ...

  }).drop()) asXls;

然后在我的集成測試中,我像這樣做存根


    this.owner.register('service:exportxls', Service.extend({

      init() {

        this._super(...arguments);

        this.set('asXls', {

          perform: sinon.stub()

        });

      }

    }));

在那之后,我可以進行常規檢查


    assert.ok(exportService.asXls.perform.calledOnce);


查看完整回答
反對 回復 2024-01-18
  • 3 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號