2012-03-29 2 views
0

Я работаю над преобразованием приложения Backbone в приложение Ember с использованием Ember Data. Он отлично работает в браузере, но тестовые примеры Jasmine не пройдут. Когда я пытаюсь создать запись в тестовом случае жасмина я получаю эту ошибку:Создание записи с EmberData при тестировании с помощью Jasmine

TypeError: 'undefined' is not a function (evaluating 'type._create({ store: this })') in http://localhost:8888/spec/javascripts/generated/assets/application.js (line 26874) 

Это фактический код, что точки сообщения об ошибке:

createRecord: function(type, properties, transaction) { 
    properties = properties || {}; 

    // Create a new instance of the model `type` and put it 
    // into the specified `transaction`. If no transaction is 
    // specified, the default transaction will be used. 
    // 
    // NOTE: A `transaction` is specified when the 
    // `transaction.createRecord` API is used. 
    var record = type._create({ 
     store: this // line 26874 
    }); 

фактического код, что тестовый случае выполняет следующие действия:

nutrient = App.Nutrient.createRecord({"name_min":"nut 1","female_31_50_min":7.5,"male_31_50_min":8.0,"created_at":"2011-10-10T01:31:53Z","female_51_70_min":8.5,"updated_at":"2011-10-12T12:28:35Z","male_70_plus_min":10.0,"female_19_30_min":6.5,"child_4_8_min":4.0,"male_19_30_min":7.0,"lactating_14_18_min":5.75,"infant_0_05_min":1.0,"female_70_plus_min":9.5,"pregnant_14_18_min":5.8,"infant_6_12_min":2.0,"id":1,"male_9_13_min":5.0,"child_1_3_min":3.0,"female_9_13_min":4.5,"female_14_18_min":5.5,"male_14_18_min":6.0,"lactating_31_50_min":7.75,"pregnant_31_50_min":7.8,"pregnant_19_30_min":6.8,"male_51_70_min":9.0,"lactating_19_30_min":6.75,"female_31_50_max":8.5,"male_31_50_max":9.0,"female_51_70_max":9.5,"male_70_plus_max":11.0,"female_19_30_max":7.5,"child_4_8_max":5.0,"male_19_30_max":8.0,"lactating_14_18_max":6.75,"infant_0_05_max":2.0,"female_70_plus_max":10.5,"pregnant_14_18_max":6.8,"infant_6_12_max":3.0,"male_9_13_max":6.0,"child_1_3_max":4.0,"female_9_13_max":5.5,"female_14_18_max":6.5,"male_14_18_max":7.0,"lactating_31_50_max":8.75,"pregnant_31_50_max":9.8,"pregnant_19_30_max":7.8,"male_51_70_max":10.0,"lactating_19_30_max":7.75}) 

person = new App.Person.createRecord({age: 0.25}) 

expect(nutrient.requiredNutrientForPerson(person)).toEqual({min_amount: 1.0, max_amount: 2.0}) 

Любые идеи были бы оценены.

ответ

2

Извините, неважно. Проблема с этой линии:

person = new App.Person.createRecord({age: 0.25}) 

мне нужно удалить new ключевое слово, и он правильно работал

+0

Ах, не заметил, что, но это имеет смысл сейчас, с учетом ошибки. Надеюсь, я не путал вопросы с упоминанием цикла запуска. Приятно видеть, что некоторые люди используют данные ember-data сейчас - мне нужно будет еще раз взглянуть дальше. –

2

В целом, если у вас возникли проблемы с тестом, который вы не испытываете в браузере, это связано с тем, что тесты выполняются за пределами цикла запуска Ember.

Попробуйте позвонить Ember.run.sync() до expect(), чтобы заставить синхронизацию. Альтернативно, поместите любой код, который включает привязку в анонимном fn внутри: Ember.run(function() { }).

Проверьте источник данных ember и ember-data для других примеров тестирования, так как покрытие довольно твердое.

Сказав это, я не эксперт по данным ember-data, поэтому я не уверен, что это проблема, с которой вы столкнулись.

Смежные вопросы