使用茉莉花测试主干关系模型
Testing a backbone relation model by using jasmine
假设我有两个简单的夹具文件,一个用于用户(1),一个用于消息(2)。
消息的主干模型如下 (3)。
如果我加载"消息装置",我还希望获得消息模型中指定的有关用户的相关信息。
使用 Jasmine 测试套件在规范视图 (4) 中激活此目标的正确方法是什么?
详情请参阅(4)中的注释。
(1)
// User Fixture
beforeEach(function () {
this.fixtures = _.extend(this.fixtures || {}, {
Users: {
valid: {
status: 'OK',
version: '1.0',
response: {
users: [
{
id: 1,
name: 'olivier'
},
{
id: 2,
name: 'pierre',
},
{
id: 3,
name: 'george'
}
]
}
}
}
});
});
(二)
// Message Fixture
beforeEach(function () {
this.fixtures = _.extend(this.fixtures || {}, {
Messages: {
valid: {
status: 'OK',
version: '1.0',
response: {
messages: [
{
sender_id: 1,
recipient_id: 2,
id: 1,
message: "Est inventore aliquam ipsa"
},
{
sender_id: 3,
recipient_id: 2,
id: 2,
message: "Et omnis quo perspiciatis qui"
}
]
}
}
}
});
});
(三)
// Message model
MessageModel = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasOne,
key: 'recipient_user',
keySource: 'recipient_id',
keyDestination: 'recipient_user',
relatedModel: UserModel
},
{
type: Backbone.HasOne,
key: 'sender_user',
keySource: 'sender_id',
keyDestination: 'sender_user',
relatedModel: UserModel
}
]
});
(四)
// Spec View
describe('MyView Spec', function () {
describe('when fetching model from server', function () {
beforeEach(function () {
this.fixture = this.fixtures.Messages.valid;
this.fixtureResponse = this.fixture.response.messages[0];
this.server = sinon.fakeServer.create();
this.server.respondWith(
'GET',
// some url
JSON.stringify(this.fixtureResponse)
);
});
it('should the recipient_user be defined', function () {
this.model.fetch();
this.server.respond();
// this.fixtureResponse.recipient_user is not defined
// as expected by the relation defined in (3)
expect(this.fixtureResponse.recipient_user).toBeDefined();
});
});
});
});
看看这一系列教程 http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html
这是关于模型测试的特定部分。
不知道是否会解决您的问题,但可能包含宝贵的信息。
this.fixtureResponse
是模型的源数据,但在实际创建模型时,它会将该数据复制到内部属性。因此,当主干关系解析关系时,它不应更改源数据对象。
你试过expect(this.model.get('recipient_user')).toBeDefined()
吗?
Backbone-Relational 提供了从通过模型的 fetch 检索的 JSON 中的嵌套实体创建相关模型或使用 fetchRelated 延迟加载相关模型的功能。
您正在向 Backbone-Relational 提供消息模型数据,但无法检索用户模型数据。 您可以添加另一个响应,返回相应的相关用户数据,并在消息模型上调用 fetchRelated 。
或者,将用户数据内联到消息响应中,用户模型将自动创建并作为关系添加到消息模型上。
相关文章:
- Ext.js从json构建模型关系的问题
- 骨干关系中的链接模型
- 在Knockout.js模型中创建项之间的关系
- 使用茉莉花测试主干关系模型
- 当一个模型在骨干关系中被销毁时,销毁相关模型的最佳方法是什么?
- 在这种情况下,我应该如何在余烬中放置我的模型有很多关系
- Ember.js:如何表示一个有多个模型的关系
- 如何通过关系处理特定于父级的模型值
- 为什么没有将关系添加到模型中的 loopback.io 对象中
- 响应骨干关系中的类别模型更改
- Ember.js RESTful 模型关系
- 帆.js:模型本身的一对多关系
- 如何处理嵌套在关系模型中的集合
- 从另一个具有属于关系的模型访问模型属性 Ember.js
- 余烬.js有许多模型关系保存
- ExtJS 5:父模型转换对子关联的依赖关系
- 嵌套模型上的主干关系
- 我需要在两个模型(rails)之间创建一个新关系,然后通过javascript更改关系模型的属性
- Backone 关系子模型类型
- 向javascript提供模型及其关系模型