2014-12-14 13 views
6

Próbuję wykonać podstawowy test "działa" dla Mixina, który ma być używany z Modelem. Zakładam, że podejście do testowania jednostkowego Mixina powinno się odbywać nie na samym Mixinie, ale na ogólnej klasie Modelu, w której mieszanka ta została zmieszana.Jednostka testująca model Mixina

Zakładając, że to pierwsze założenie/strategia ma sens, oto co próbowałem wykonać:

import DS from 'ember-data'; 
import Ember from 'ember'; 
import DictionaryManagerMixin from 'trainer/mixins/dictionary-manager'; 

module('DictionaryManagerMixin'); 

test('it works', function() { 
    var DictionaryManagerModel = DS.Model.extend(DictionaryManagerMixin, { 
     title: DS.attr('string') 
    }); 
    var myStore = DS.Store.create(); 
    var subject = myStore.createRecord(DictionaryManagerModel); 
    ok(subject); 
}); 

ten nie działa, co daje następujący błąd:

TypeError: Cannot read property 'lookup' of undefined 
    at null.<anonymous> (http://localhost:4200/assets/vendor.js:95610:35) 
    at Descriptor.ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:28466:25) 
    at get (http://localhost:4200/assets/vendor.js:33944:21) 
    at Ember.Object.extend.adapterFor (http://localhost:4200/assets/vendor.js:97005:27) 
    at Ember.Object.extend._generateId (http://localhost:4200/assets/vendor.js:95682:28) 
    at Ember.Object.extend.createRecord (http://localhost:4200/assets/vendor.js:95654:32) 
    at Object.eval (trainer/tests/unit/mixins/dictionary-manager-test.js:17:28) 
    at Object.Test.run (http://localhost:4200/assets/test-support.js:2632:18) 
    at http://localhost:4200/assets/test-support.js:2719:10 
    at process (http://localhost:4200/assets/test-support.js:2435:24) 

Każda pomoc będzie mile widziana.

+0

Robię to samo, ale używając mixina jako jednostki do testowania zamiast testowania modelu. Jeśli używasz ember-cli, kiedy generujesz mixin, tworzy test dla ciebie – leojh

Odpowiedz

0

Zazwyczaj lookup wymaga pojemnika, więc jest to wskazówka, co jest przyczyną problemu. Ma to sens, ponieważ DS polega na kontenerze, aby można było wyszukać zarejestrowane modele pod numerem model:model-name;

Tak więc zależność testowa dla tego mixin jest naprawdę ustawiona poprawnie na Ember Data. Jeśli więc twój test działa tak, aby działał na modelu Ember Data, to mixin mniej więcej po prostu pasuje do ustawień obiektu, tak jak tego oczekuje.

Powiedziałbym spróbować użyć moduleForModel z użytecznego Ember doc:

moduleForModel('dictionary-manager-model'); 

test('your test here', function(assert) { 
    // this.subject aliases the createRecord method on the model 
    const dictionaryManagerModel = this.subject(); 
}); 

Czy trzeba warunkowo rolka w wstawek z modelem? Jeśli twój model zawsze używa mixinu, możesz to zrobić w pliku definicji modelu i przetestować go tak, jak pokazano powyżej. W swoim przykładzie wstawek jest dodawany do modelu, a model jest przekazywany do createRecord` ale to nie jest zalecana:

https://github.com/emberjs/data/blob/v2.14.10/addon/-private/system/store.js#L351 assert( Podanie klasy przechowywanie metod została usunięta. Przekazujemy dasherized ciąg zamiast $ {modelName} , typeof modelName === 'string'); , dlatego polegamy na odnośniku na kontenerze.

Zasadniczo myślę, że chodzi o test modelowy, a nie test mieszania. Chyba, że ​​mixin można zrolować w coś, co nie jest modelem i nadal działa.

ember generate model-test dictionary-manager-model jeśli już nie istnieje, a następnie w pliku modelu jest już miksowany mixin. Być może nie musi to być osobny mixin?

Mam nadzieję, że to zaczyna się we właściwym kierunku, okrzyki! ✌

Powiązane problemy