ben bir Heisenbug yakalamaya çalışıyorum.Kor yükseltme bir test kırar ve sadece Safari
Projemizi Ember CLI 0.2.0 ve Ember 1.10.0'dan Ember CLI 0.2.3'e ve Ember 1.11.1'e güncelleştiriyorum. Bu oldukça acısız bir süreçti, ancak şimdi sadece Safari'de (7.1.5) başarısız olan tam bir test var. PhantomJS, Chrome ve Firefox'ta geçer.
Rahatsız edici olarak, test yalnızca Testem tarafından başlatıldığında (yani koddaki bir değişiklik otomatik güncelleme test çalıştırmasını tetiklediğinde) başarısız olur. Qunit web arayüzünden testler başlatırsam geçer. Her iki şey de test gruplamasına bakılmaksızın doğrudur. Test edilen özellik, tarayıcıda manuel olarak çalıştırıldığında gayet iyi çalışır.
Bu bir bütünleştirme testi ve girişte bir değer değiştirildiğinde girişin sunucudan döndürülen değerle güncellendiğini doğrular. Testlerde, "sunucu" bir Pretender örneğidir.
test('Editing allocation cell', function() {
visit('/district/periods');
fillIn(SELECTORS.definitionRowInput(1,0), '100');
triggerEvent(SELECTORS.definitionRowInput(1,0), 'focusout');
// The triggerEvent should be tripping the focusOut event on a particular
// Ember.Textfield subclass, which subsequently leads to a POST request to
// the server. On Safari, however, the focusOut event isn't being called here.
// It is called elsewhere in the app, and it works in production.
// Things that also don't work: keyEvent(element, 'keypress', 16) (a tab),
// sending 'blur', sending 'focus-out'.
// 'focus-out' also fails in Firefox, 'blur' and tab fail in all 4 envs
andThen(function() {
equal($(SELECTORS.definitionRowInput(1,0)).val(), '90', 'The updated input takes the return value from the server (even if it is different from input)');
equal($(SELECTORS.gradeTotal(2)).text(), '120', 'Grade total updates with the new sum');
});
});
Not ikinci andThen()
blok: kontrolüne focusout
göndererek, geri sunucuya veri güncellemek için destek bileşeninde kod isteyen olmalıdır Burada test kendisi gibi görünür. diğer tarayıcılar bunu - Bunu doğrulamak için talip yanıtlayıcı bir console.log()
koymak - ama Safari değildir. Sanırım focusout
etkinliğine doğru yanıt vermiyor.
Bu sınamanın yalnızca Ember CLI güncelleştirmesiyle farklılık gösteren bir dalda geçtiğini düşünürsek ... bu arayı yapmak için ne değişmiş olabilir?
ETA: Bu güncelleştirmede güncellenen tüm kitaplıkları tek tek geri aldım ve sınama başarısız olmaya devam ediyor. İşe benzeyen tek değişiklik, Ember'i geri almaktır. 1.11.0 ile aynı şekilde 1.11.1'de kırılır, bu yüzden değişim 1.10.0 ile 1.11.0 arasındadır. (Bu sadece beni ~ 600 bırakarak ayrılır bırakır ...)
ETA2: Ben 1.11.0-beta.5 ve 1.11.0 arasındaki kapsamı daraltdım. Ben use local builds of ember için bower link kullanmaya çalışıyorum ama kor testleri ve bu iki etiketin arasındaki ilişkiyi çalışan şimdiye kadar güvenilmez olmuştur kurar etkili ortadan ayırıcı yol açar biri değil. Aslında senin testler, ancak tarihini düzleştirme ile size yardımcı olamaz
Komut satırında çalışırken testem ile aynı sorunları yaşadım, bunun vaatleri çözme ile bir yarış durumu olduğundan şüpheleniyorum. Bu aramanın etrafında bir "Ember.run ..." yöntemini kullanmayı düşündün mü? – jonathanKingston
“triggerEvent()' çağrısı çevresinde mi? Hayır, bunu düşünmemiştim - deneyeceğim. Teşekkürler! – pjmorse
... hayır. Hala orada. İki şey benim için önemli gözüküyor: (1) Ember'in kendisinde "burada çalışıyor" ve "burada kırıldı" etiketlerinin oldukça açık bir çifti var ve (2) Safari'yi etkiliyor, ancak diğer tarayıcıları etkilemiyor. Bir yarış durumu ile daha az güvenilir bir şekilde tekrarlanabilir olmasını bekler miydim? – pjmorse