2016-06-27 63 views
0

我正在嘗試編寫渲染句柄組件的單元測試。當測試運行時,對象爲空,並且不生成HTML。我已經使用其他組件跟隨此相同的佈局,並且它們正確渲染。我很困惑,爲什麼返回的對象爲null /未定義Ember單元測試渲染句柄返回null或undefined

這裏是我的餘燼測試代碼:

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

moduleForComponent('csv-upload', 'Integration | Component | csv upload', { 
    integration: true 
}); 

test('it renders', function(assert) { 
assert.expect(2); 


this.render(hbs`{{csv-upload}}`); 

assert.equal(this.$().text().trim(), ''); 

// Template block usage: 
this.render(hbs` 
    {{#csv-upload}} 
    template block text 
    {{/csv-upload}} 
`); 

assert.equal(this.$().text().trim(), ''); 
}); 

從測試的輸出是:

ok 32 PhantomJS 2.1 - JSHint - integration/pods/components/csv-upload/component-test.js: should pass jshint 
not ok 33 PhantomJS 2.1 - Integration | Component | device actions: it renders 
--- 
    actual: > 
     null 

從輸出另一件事:

undefined is not an object (evaluating 'this.get('selected').isAny') 

回答

1

它看起來像你的組件需要一些屬性進行設置(selected)在我們的例子。由於這是未定義的,組件將無法正確呈現,這反過來使測試失敗。嘗試將selected屬性傳遞給您的組件,並查看是否有幫助。

注:這是轉換成答案的原始評論。

+0

謝謝!我會投票答覆 – ajputnam

0

來自Jesper Haug Karsrud的意見是正確的答案!謝謝!

要糾正問題,必須在渲染前爲組件設置屬性。這些變化來糾正問題:

this.set('myProperty', 'fakedata'); 
this.render(hbs`{{csv-upload data=myProperty}}`); 
assert.equal(this.$().html(), '<input id="ember580" type="file" class="ember-view ember-text-field">'); 
+0

有一點要記住,'this。$()'是測試容器,而不是渲染組件 –

相關問題