簡體   English   中英

如何在集成測試中訪問ember數據存儲實例?

[英]How do you access an ember data store instance in an integration test?

這是針對Ember 2.2.0。 我想使用來自我的API服務器的實時數據來測試我的組件,使用ember-data而不是來自測試幫助器的模擬數據,手動AJAX請求,或者來自ember-cli-mirage類的工具。 目前我在測試中的所有內容都是這段代碼:

import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';

moduleForComponent('checkbox-group', 'Integration | Component | checkbox group', {
  integration: true
});

test('it renders', function(assert) {
  this.render(hbs`{{checkbox-group}}`);
  assert.equal(this.$().text().trim(), '');
});

我想做的是這樣的事情:

test('it renders', function(assert) {
  const store = getStoreFromSomewhere();
  const model = store.find('data').then(() => {
    this.render(hbs`{{checkbox-group data=model}}`);
    // Do testing on component with model from server
  });
});

問題是我不知道如何獲取商店實例,另外我不知道ember是如何進行異步測試的。

文檔不太有用:/。 有人可以讓我知道如何獲取商店實例,如果這不可能,另一種方法來使用ember-data進行此測試?

我認為,這更像是驗收測試,而不是集成測試。 驗收測試設置整個應用程序,以便您可以測試它。

我相信你應該假裝模型的集成測試,例如:

test('it renders', function(assert) {
  const modelValue = Ember.Object.create({
     prop1: value1,
     prop2: value2,
  });
  this.set('model', modelValue);
  this.render(hbs`{{checkbox-group data=model}}`);
  // Do testing on component with fake model
  });
});

話雖如此 ,我認為我要說的只有在Ember 2.2之前有效(我相信Ember 2.3已被棄用)。 您可以執行以下操作:

let store = this.container.lookup('service:store');

但是,如果你這樣做...當你使用商店時會出現錯誤。

“斷言失敗:您已打開測試模式,禁用了運行循環的自動運行。您需要在運行中包裝任何帶有異步副作用的代碼”

這意味着您需要在Ember.run中包裝異步代碼

Ember.run(() => {
  let store = this.container.lookup('service:store');
  store.findAll('post').then((posts) => {
     //do stuff
  });
});

我的兩分錢,不要直接在集成測試中使用商店。

moduleForComponent規范中,我認為執行此操作的方法是這樣的:

var store = Ember.getOwner(this).lookup("service:store");

而不是:

var store = this.container.lookup('service:store');

並且,您可以在beforeEach模擬它:

this.promise = new Ember.RSVP.Promise((resolve) => {
  var response  = anEmberObject; 
  resolve(response);
});

this.storeMock = Ember.Service.extend({
  save: ()=>{
    return this.promise;
  },
  reload: (query)=>{
    return this.promise;
  }
});


Ember.getOwner(this).register('service:store', this.storeMock);
Ember.getOwner(this).inject('component', 'store', 'service:store');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM