11

ユーザー用 (1) とメッセージ用 (2) の 2 つの単純なフィクスチャ ファイルがあるとします。

メッセージのバックボーン モデルは次の (3) です。

「メッセージフィクスチャ」をロードすると、メッセージモデルで指定されたユーザーに関する関連情報も取得したいと思います。
ジャスミン テスト スイートを使用して、スペック ビュー (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'
                        }
                    ]
                }
            }
        }
    });
});

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

3 に答える 3

1

この一連のチュートリアルをご覧くださいhttp://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html

これは、モデルテストに関する特定の部分です。

問題が解決するかどうかはわかりませんが、貴重な情報が含まれている可能性があります。

于 2012-08-24T15:04:15.783 に答える
0

this.fixtureResponseはモデルのソースデータですが、モデルが実際に作成されると、そのデータのコピーが内部プロパティに作成されます。したがって、Backbone Relationalがリレーションを解決するときに、ソースデータオブジェクトを変更しないでください。

試してみましたexpect(this.model.get('recipient_user')).toBeDefined()か?

于 2012-12-01T22:17:57.603 に答える
0

Backbone-Relational は、モデルのフェッチを介して取得された JSON 内のネストされたエンティティから関連モデルを作成する機能、またはfetchRelatedを使用して関連モデルを遅延ロードする機能を提供します。

Backbone-Relational にメッセージ モデル データを提供していますが、ユーザー モデル データを取得する方法はありません。適切な関連ユーザー データを返す別の応答を追加し、メッセージ モデルで fetchRelated を呼び出すことができます。

または、ユーザー データをメッセージ応答にインライン化すると、ユーザー モデルが自動的に作成され、メッセージ モデルの関係として追加されます。

于 2013-02-26T14:18:47.523 に答える