模拟用于在另一个ember组件内测试Ember.easyForms输入组件的模型

时间:2014-11-19 09:42:53

标签: ember.js ember-cli ember-qunit

我正在使用moduleForComponent进行ember-cli qunit测试。我在我创建的ember组件中有以下select元素。

        {{input site as="select"
            collection="sites"
            selection="site"
            optionLabelPath="content.siteLabel"
            optionValuePath="content.id"
            prompt="Please Select"
            label=" "
        }}

使用sites找到实际的store集合。

sites : function() {
    return this.get('store').find('site');
}.property()

我正在使用jsMockito来模拟store

var siteMock = mock(DS.Model);
when(siteMock).get('id').thenReturn(1);
when(siteMock).get('siteLabel').thenReturn('Qunit');

var storeMock = mock(DS.Store);
when(storeMock).find('site').thenReturn([siteMock]);

我将它作为测试中的参数传递给组件。

var component = this.subject({
    store : storeMock
});

生成的html看起来像这样,似乎siteMock已经渲染,但optionLabelPathoptionValuPath无法正常工作,即使我已经在模拟上添加了适当的期望。

<select id="ember473" class="ember-view ember-select">
    <option value="">Please Select</option>
    <option id="ember491" class="ember-view" value=""></option>
</select>

我已经在调试器中使用siteMock上的getter进行了测试,一切都按预期工作。我想在when的某些属性上需要另一个siteMock条件,但我不确定是什么。有人可以给我一些建议吗?

1 个答案:

答案 0 :(得分:0)

问题似乎是您在路径content.中使用optionLabelPath="content.siteLabel",它正在考虑控制器代理模型。

但是你的测试是直接使用模型 - 由控制器修改 - 他们没有内容属性。