Çok garip bir problemle karşılaştım: Uygulamamda% 100 test kapsamı elde etmek için ünite testleri yapmaya çalışıyorum. Ve tabii ki denetleyiciler için bazı testler yazdım ama Ember'de (2.4.0) ember-cli kullanarak herhangi birşeyi test etmenin bir yolu yok gibi görünüyor. Ben bu fonksiyonu kapsamalıdır bir test yazıyorumEmber kontrol cihazlarında uyumsuzluk fonksiyonlarını test eden birim
readObject() {
this.store.findRecord('myModel',1).then(function(obj) {
this.set('property1',obj.get('property2');
}.bind(this));
}
:
Bunu yapan denetleyicisi bir işleve sahiptir.
test('action readObject', function (assert) { const cont = this.subject(); cont.readObject(); assert.equal(cont.get('property1'), 'someValue); });
readObject() zaman uyumsuz çağrı ama bu sorunun kökü olmadığı için obivously, bu assert işe yaramaz. Sorun şu ki, this.store.findRecord'daki bir geri arama çalıştırılıyor - denetleyicim zaten'u yok etti! Böylece "yok edilen nesneyi çağırmak" hatasını alıyorum. Başka bir deyişle
- Bunu bir söz benim işlevini sarın ve bunun gibi her iki fonksiyonu yeniden biçimlendirmek bile:
readObject() {
return new Promise(function(resolve) {
this.store.findRecord('myModel',1).then(function(obj) {
this.set('property1',obj.get('property2');
resolve();
}.bind(this));
}.bind(this));
}
ve
test('action readObject', function (assert) {
const cont = this.subject();
cont.readObject().then(function() {
assert.equal(cont.get('property1'), 'someValue);
});
});
Yürümezdi, sonra çünkü readObject() işlevini yürütmek, denetleyicilerimin hemen yok edilmesini sağlar, herhangi bir geri arama beklemez. Yani, örneğin Store.findRecord yerine herhangi bir async çağrısı olabilir - örneğin, Ember.run.later olabilir.
Herkes aynı sorunu yaşıyor mu? Çok fazla makale okudum, Ember'in böylesine büyük bir topluluğa sahip olmasının, uyumsuzluk testi yapmak için bir yol sağladığına inanamıyorum.
Herhangi bir ipucu varsa - lütfen bana bir ipucu verin, çünkü burada biraz kayboldum. Ben kontrolörleri yanlış yapıyorum
, Ember bunun içinde herhangi zaman uyumsuz işlemleri varsayalım değildir: Şu anda iki düşünce var. Fakat asenkron çağrıları servislere taşıyor olsam bile, aynı problemi onlar için yazım testi yaparak vurdum.
ben olması
readObject() { this.store.findRecord('myModel',1).then(this.actualReadObject.bind(this)); } actualReadObject(obj) { this.set('property1',obj.get('property2'); }
benim fonksiyonları ayrıştırmak zorunda testler ile kaplı en az geri aramalar vücudun en ama bu asla benim app% 100 test kapsama almak anlamına gelir.
Herhangi bir ipucu için şimdiden teşekkür ederiz.
Bir tavsiye için teşekkürler, ancak bu bir QUnit sorunu değil, bu bir Ember. :( –
findRecord geri arama işlemini yürüttüğü zaman - kontrol cihazı kendisi zaten yok edildi.Anladığım kadarıyla - Ember sadece bir Ember.run çağrısı içinde testi yürütüyor. Bu çağrı dışında herhangi bir şey yapılırsa - uygulama zaten yok. :( –
PS: Ben assert.async ile bu denemeyi denedim, ama o da yardımcı olmadı - findRecord çağrısı hata ile başarısız olmaya başladı: qunit beklendiği gibi çalışıyor iken "null" özelliği '_internalModel' okuyamaz. –