【问题标题】:Testing a backbone relation model by using jasmine使用 jasmine 测试骨干关系模型
【发布时间】:2012-08-10 20:52:55
【问题描述】:

假设我有两个简单的夹具文件,一个用于用户 (1),一个用于消息 (2)。

消息的主干模型如下 (3)。

如果我加载“消息夹具”,我还希望获得消息模型中指定的有关用户的相关信息。
使用 jasmine 测试套件在规范视图 (4) 中激活此目标的正确方法是什么?
详情请参见(4)中的 cmets。


(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'
                        }
                    ]
                }
            }
        }
    });
});

(2)

// 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"
                        }
                    ]
                }
            }
        }
    });
});

(3)

// 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
        }
    ]
});

(4)

// 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();
            });
        });
    });
});

【问题讨论】:

标签: javascript backbone.js jasmine backbone-relational


【解决方案1】:

看看这个系列教程http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html

这是关于Model testing的具体部分。

不知道能否解决您的问题,但可能包含宝贵的信息。

【讨论】:

  • 感谢您的回答。实际上本教程并没有提到骨干关系。
【解决方案2】:

this.fixtureResponse 是模型的源数据,但在实际创建模型时,它会将该数据复制到内部属性中。因此,当 Backbone Relational 解析关系时,它不应该更改源数据对象。

你试过expect(this.model.get('recipient_user')).toBeDefined()吗?

【讨论】:

    【解决方案3】:

    Backbone-Relational 提供了从通过模型的 fetch 检索到的 JSON 中的嵌套实体创建相关模型或使用 fetchRelated 延迟加载相关模型的能力。

    您正在向 Backbone-Relational 提供消息模型数据,但无法检索用户模型数据。您可以添加另一个响应,返回相应的相关用户数据并在消息模型上调用 fetchRelated。

    或者将用户数据内联到消息响应中,用户模型将自动创建并作为关系添加到消息模型上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2012-05-30
      • 2013-06-25
      相关资源
      最近更新 更多