2017-04-06 57 views
1

和其他数百万其他应用程序一样,我们有一个可选属于另一个的模型。测试Ember计算属性时创建相关对象的更好方法?

这种模式有一个依赖于父母,就像存在一个计算的属性...

// some-model 

parent: belongsTo('some-model'), 

hasParent: Ember.computed('parent.id', function() { 
    return Ember.isPresent(this.get('parent.id'); 
}), 

(我们使用一个CP,而不是computed.alias因为联想会出现/消失,alias不遵守变化)

一切顺利,很好,它适合我们。我去添加一个单元测试...

test('hasParent', function(assert) { 
    const someModel = this.subject({ id: 1, name: 'Mr. Model, Sr' }); 

    assert.equal(someModel.get('hasParent'), false, 
    'returns false when no parent ID'); 

    const childModel = this.subject({ name: 'Little Model, Jr.' }); 

    childModel.set('parent.content', someModel); 

    assert.equal(childModel.get('hasParent'), true, 
    'returns true when has parent with ID'); 

    childModel.set('parent.content', null); 

    assert.equal(childModel.get('hasParent'), false, 
    'returns false when no parent ID'); 
}); 

parent.content设置似乎真的哈克,我想知道是否有分配模式,另一种更好,更标准的方式。 Ember文档是...稀疏。

+1

如果您使用的是moduleForModel,您[有权访问商店](https://github.com/emberjs/ember-qunit#ember-data-tests)。 – steveax

+0

什么是你的余烬数据版本?在此[twiddle](https://ember-twiddle.com/d12acfc747bae9fd5b926b2abbe32cf8?openFiles=tests.unit.models.some-model-test.js%2C)查看测试正在使用'parent'而不是'parent'。 content'。 – alptugd

+0

@steveax啊,在文档中错过了......我没有真正意识到模型可以访问这样的商店,谢谢 - 如果你想发布一个答案,我会接受它,因为它看起来像官方的方式做它 – kevlarr

回答

2

关于针对该问题发表的评论,最好在测试模型时使用store。因此,以下twiddle可能是实现给定测试场景的更好方法。如果未来其他人需要,我会将其作为答案。