Тестирование магистральной связи с жасмином

ОБНОВЛЕНО:

У меня есть простая Backbone-реляционная модель:

@App.M.Product = Backbone.RelationalModel.extend
    defaults: {}
    url: App.D.dataURL
    relations: [
        {
            type: Backbone.HasMany
            key: 'templates'
            relatedModel: 'App.M.Template'
            collectionType: 'App.C.Templates'
            reverseRelation:
                key: 'product'
        }
        {
            type: Backbone.HasMany
            key: 'pages'
            relatedModel: 'App.M.Page'
            collectionType: 'App.C.Pages'
            reverseRelation:
                key: 'product'
        }
        {
            type: Backbone.HasMany
            key: 'uploaded_images'
            relatedModel: 'App.M.UploadedImage'
            collectionType: 'App.C.UploadedImages'
            reverseRelation:
                key: 'product'
        }
    ]
    initialize: ->
        if @get('minimumNumberOfPages') < 1
            @set 'minimumNumberOfPages', 1
    fixPages: ->
        col = @get 'pages'
        col.each (page) ->
            page.collection = col

и еще более простой набор тестов:

"use strict"

describe 'Product', ->
    pr = null
    beforeEach ->
        pr = new App.M.Product
    it 'should be defined', ->
        expect(pr).toBeDefined()

Однако модель не инициализируется (взято из вывода терминала testem):

TypeError: Cannot read property 'prototype' of undefined
    at Backbone.HasMany.Backbone.Relation.extend.initialize (http://localhost:7357/app/bower_components/backbone-relational/backbone-relational.js:835:78)
    at Backbone.Relation (http://localhost:7357/app/bower_components/backbone-relational/backbone-relational.js:537:9)
    at new child (http://localhost:7357/app/bower_components/backbone/backbone-min.js:1:25220)
    at _.extend.initializeRelation (http://localhost:7357/app/bower_components/backbone-relational/backbone-relational.js:137:5)
    at null.<anonymous> (http://localhost:7357/app/bower_components/backbone-relational/backbone-relational.js:1176:31)
    at Array.forEach (native)
    at Function.w.each.w.forEach (http://localhost:7357/app/bower_components/underscore/underscore-min.js:1:599)
    at Backbone.RelationalModel.Backbone.Model.extend.initializeRelations (http://localhost:7357/app/bower_components/backbone-relational/backbone-relational.js:1175:6)
    at Backbone.RelationalModel.Backbone.Model.extend.set (http://localhost:7357/app/bower_components/backbone-relational/backbone-relational.js:1373:11)
    at Backbone.Model (http://localhost:7357/app/bower_components/backbone/backbone-min.js:1:3929)

Почему это? Приложение работает корректно, тесты нет.


person mreq    schedule 29.06.2013    source источник


Ответы (1)


Итак, ошибка ReferenceError: product is not defined. Это связано с тем, что вы определили его в функции before и в тесте, поэтому оба они не совпадают, и в тесте он не определен. Вы должны определить его в своем блоке описания:

"использовать строгий"

описать «Продукт», -> продукт = ноль

beforeEach ->
    product = new App.M.Product

it 'should be defined', ->
    expect(product).toBeDefined()

Что касается другой ошибки TypeError: Cannot read property 'prototype' of undefined, кажется, вы пропустили добавление коллекций, упомянутых в разделе collectionType. Итак, плагин ищет App.C.Pages в глобальном пространстве имен и пытается получить прототип объекта. Но, как говорит ошибка, он не определен

person Andreas Köberle    schedule 01.07.2013
comment
Спасибо, помог с первой частью. Как насчет остальных? pastebin.com/HUkNG9kC - person mreq; 01.07.2013