2015-04-10 13 views
28

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

+0

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

+0

“triggerEvent()' çağrısı çevresinde mi? Hayır, bunu düşünmemiştim - deneyeceğim. Teşekkürler! – pjmorse

+0

... 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

cevap

6

o kadar zor değildir. Bahsettiğin etiketlerin arasında 49 yamalar var. git cherry-pick komutlarının bir akışı, yüklediğim dalı https://github.com/rdebath/test/tree/ember.js

'a verir. Bu şubedeki her bir taahhüt (v1.11.0-beta.5 etiketinden sonra), belirttiğiniz etiketler arasında 'güzel' bir rotadan gelir. . taahhüt karmaları (besbelli) birbirinden farklıdır ancak son ağaç karma nedenle bu Git için iyi bir yol ikiye ayırmak olmalıdır v1.11.0 aynıdır.

Yapı sorunları da önlenebilir, örneğin, onlara neden olan yamayu bulmak için bir bisect kullanmanızı ve olabildiğince geç bu git rebase -i yamayı öneririm. Bu düzeltmenin hemen yanında bir sorun çıkarmalı; geri gerçek ağacına şeyi ilişkilendirmek mümkün istiyorum olarak ancak yapısı "kabak" bu hareketin kaydedilmesini muhtemelen iyi bir fikir değil. o "güzel" yol makul açıktır ile

git log --graph --decorate --oneline --date-order --all 

:

Ben komutu kullanılan kaydedilmesini listesini seçmenize yardımcı olmak için.

+0

Bu gerçekten faydalı görünüyor, teşekkürler. Deneme şansı bulduğumda tekrar kontrol edeceğim. – pjmorse

+0

Hayal kırıklığıyla, güncelleme şubemi daha yeni bir dev dalında yeniden oluşturduğumda test hataları değişti, bu yüzden sorunun giderildiğini doğrulayamıyorum. Ama bence, şeylerin nereye doğru gittiğini bulmak için Ember'i nasıl ikiye ayırabileceğimin ana hatlarını hak ettin. – pjmorse

+0

Tamam ... teşekkürler. – user3710044