2017-08-08 60 views
1

我有一個使用this.get('model.property')的組件,它可以按預期工作。Ember.js + Mirage:在集成測試中拉扯嘲弄的關係

對於我使用的是幻影,這已爲我所有的其他測試工作(集成測試包括)我的集成測試,但是當我測試這個特定組件,我得到:

TypeError: Cannot read property 'then' of undefined

這是什麼我的測試看起來像:

import { moduleForComponent, test } from 'ember-qunit' 
import hbs from 'htmlbars-inline-precompile' 
import { startMirage } from 'app/initializers/ember-cli-mirage' 
import Ember from 'ember' 

moduleForComponent('summary-card', 'Integration | Component | summary card', { 
    integration: true, 
    beforeEach() { 
    this.server = startMirage() 
    }, 
    afterEach() { 
    this.server.shutdown() 
    } 
}) 

test('it renders', function(assert) { 
    const customer = this.server.create('customer') 
    const location = this.server.create('location', { customer }) 
    const manufacturer = this.server.create('manufacturer') 
    const model = this.server.create('device-model', { manufacturer }) 
    this.server.createList('device', 5, { model, customer, location }) 

    const loc = Ember.Object.create(location) 
    this.set('model', loc) 
    this.render(hbs`{{summary-card model=model model-name=model.name tag='location' belongs-to='customer' has-many='device'}}`); 

    assert.equal(this.$('h1').text().trim(), 'Location 0', 'should be titled Location 0') 

}); 

,基本上,我summary-card.js有這樣的事情:

this.get('model.' + belongs).then(relationship => {...}) 

其中belongs只是調用組件時設置的任何belongs-to的值。

我有點困惑,因爲它看起來像我傳遞給我的測試的模擬模型並不像真正代表模型一樣運行ember s(我使用Mirage進行開發以及)。有什麼地方可以找到更多關於那裏到底發生了什麼的嗎?

謝謝!


P.S.我也嘗試使用盡可能由server.create()提供location對象,我得到一個稍微不同的錯誤:

TypeError: _this.get(...).then is not a function

回答

1

好,通過閱讀this answer,我設法找到了自己的解決方案,它的作品真的好:

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

moduleForComponent('summary-card', 'Integration | Component | summary card', { 
    integration: true 
}) 

test('it renders', function(assert) { 
    this.inject.service('store', {as: 'store'}) 
    let location 

    Ember.run(() => { 
    location = this.store.createRecord('location', { 
     id: 0, 
     name: 'Location 0', 
     customer: this.store.createRecord('customer', { 
     id: 1, 
     name: 'Customer 0' 
     }), 
     devices: [this.store.createRecord('device', {id: 1})] 
    }) 
    }) 

    this.set('model', location) 
    this.render(hbs` 
    {{#summary-card model=model model-name=model.name tag='location' belongs-to='customer' has-many='device'}} 
     <div class='test-content'>Test Content</div> 
    {{/summary-card}} 
    `) 

基本上,我都選擇了直接使用存儲,而不是使用幻影,和它的作品!