测试模型 编辑页面
英文原文:http://emberjs.com/guides/testing/testing-models/
单元测试方案和计算属性与之前单元测试基础中说明的相同,因为DS.Model
集成自Ember.Object
。
[Ember Data[模型可以使用moduleForModel
助手来测试。
假定有一个Player
模型,模型定义了level
和levelName
属性。通过调用levelUp
可以增加level
,并当玩家升级到5级时,为levelName
设置一个新的值。
1 2 3 4 5 6 7 8 9 10 11 |
App.Player = DS.Model.extend({ level: DS.attr('number', { defaultValue: 0 }), levelName: DS.attr('string', { defaultValue: 'Noob' }), levelUp: function() { var newLevel = this.incrementProperty('level'); if (newLevel === 5) { this.set('levelName', 'Professional'); } } }); |
下面创建一个测试,测试将在玩家等级为4时,调用levelUp
方法来判断levelName
是否正确改变。这里将使用moduleForModel
来获取玩家的实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
moduleForModel('player', 'Player Model'); test('levelUp', function() { // this.subject aliases the createRecord method on the model var player = this.subject({ level: 4 }); // wrap asynchronous call in run loop Ember.run(function() { player.levelUp(); }); equal(player.get('level'), 5); equal(player.get('levelName'), 'Professional'); }); |
在线示例
测试关联关系
对于关联关系,可能只希望测试是否正确声明了关联关系。
例如一个User
可以拥有一份Profile
。
1 2 3 4 5 |
App.Profile = DS.Model.extend({});
App.User = DS.Model.extend({
profile: DS.belongsTo(App.Profile)
});
|
这里可以对关联关系是否正确关联进行正确性测试。
1 2 3 4 5 6 7 8 9 10 |
moduleForModel('user', 'User Model', { needs: ['model:profile'] }); test('profile relationship', function() { var relationships = Ember.get(App.User, 'relationships'); deepEqual(relationships.get(App.Profile), [ { name: 'profile', kind: 'belongsTo' } ]); }); |
在线示例
Ember Data还包含了针对关联关系功能性测试,因此可能不需要对这些来进行重复的测试。可以查看Ember Data测试,来了解更多关于深层次的关联关系的测试。