0

我正在使用 Ember Data 将 Backbone 应用程序转换为 Ember 应用程序。它在浏览器中运行良好,但 Jasmine 测试用例不会通过。当我尝试在 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})

任何想法将不胜感激。

4

2 回答 2

2

一般来说,如果您在浏览器中没有遇到的测试问题,那是因为测试在 Ember 运行循环之外运行。

尝试调用Ember.run.sync()之前expect()强制同步。或者,将任何涉及绑定的代码放在匿名 fn 中:Ember.run(function() { }).

查看其他测试示例的 ember 和 ember-data 源,因为覆盖率非常可靠。

话虽如此,我不是 ember 数据专家,所以我不确定这是否是您遇到的问题。

于 2012-03-29T18:28:45.640 回答
2

对不起这是我的错。问题在于这一行:

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

我需要删除new关键字并且它工作正常

于 2012-03-30T00:40:52.257 回答