2012-03-29 16 views
0

Ich arbeite an der Konvertierung einer Backbone-Anwendung in eine Ember-Anwendung mit Hilfe von Ember Data. Es funktioniert gut im Browser, aber die Jasmine Testfälle werden nicht bestehen. Wenn ich versuche, einen Datensatz im Jasmine Testfall zu erstellen bekomme ich diesen Fehler:Erstellen eines Datensatzes mit EmberData beim Testen mit Jasmine

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

Dies ist der eigentliche Code, der die Fehlermeldung weist auf:

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

der eigentlichen Code, dass der Testfall Ausführung sieht so aus:

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}) 

Irgendwelche Ideen würden schätzen.

Antwort

2

Entschuldigung, mein Schlechter. Das Problem ist mit dieser Zeile:

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

ich das new Schlüsselwort entfernen benötigt und es funktionierte richtig

+0

Ah, kam das nicht bemerkt, aber es macht Sinn jetzt der Fehler gegeben. Hoffe, ich habe die Dinge nicht mit der Erwähnung der Laufschleife verwechselt. Es ist gut zu sehen, dass einige Leute jetzt Ember-Daten benutzen - ich muss bald einen anderen Blick darauf werfen. –

2

Im Allgemeinen, wenn Sie Probleme mit einem Test haben, den Sie im Browser nicht erleben, liegt das daran, dass die Tests außerhalb der Ember-Laufschleife laufen.

Versuchen Sie, Ember.run.sync() vor expect() aufzurufen, um die Synchronisierung zu erzwingen. Alternativ können Sie jeden Code, der das Binden erfordert, in eine anonyme Fn-Datei einfügen: Ember.run(function() { }).

Überprüfen Sie die Ember und Ember-Datenquelle für andere Testbeispiele, da die Abdeckung ziemlich solide ist.

Mit diesem gesagt, ich bin kein Experte für Glut-Daten, also bin ich mir nicht sicher, ob dies das Problem ist, das Sie erleben.

Verwandte Themen