Son olarak bir meslektaşım ve Çıraklık adım tanımlarını "Yapımcı" ve "Chai" olarak Promise kullanarak uygulamak için "doğru" şekilde bazı anlaşmazlıklar yaşadım. Bizim çekişmemiz, kesin olarak, Hıyarlar bağlamında vaat edilen bir çözümün gidişatının karşılıklı olarak anlaşılmamasıdır.Promise olarak Chai'yi kullanarak Prosesçi ve Salatada vaat etme vaatlerini çözme
AngularJS uygulamasına karşı test ediyoruz, dolayısıyla söz ve zaman uyumsuz davranışı çözümlemek gerekli bir kötülük. Sahip olduğumuz en büyük sorun, senkronize test davranışını zorlamak ve Salatalık’ın adım tanımları arasında vaatler vermesini sağlamaktır. Bazı durumlarda, Çizelgecin Webdriver'ın bunları yürütmeden önce adım tanımları boyunca düz bir şekilde sürtüşmesi gibi durumları gözlemledik. Bu sorunun Çözümlerimiz
varsayımsal senaryoyu düşünün ... değişebilir: karışıklık çoğuScenario: When a user logs in, they should see search form
Given a user exists in the system
When the user logs into the application
Then the search form should be displayed
Sonra adımda kaynaklanır. Bu örnekte, tanım, arama formuna ait tüm alanların sayfada birden fazla isPresent() denetimi anlamına geldiğini ileri sürmelidir. dokümantasyon ve ben bulabildim örneklerden
, ben iddia bu gibi görünmelidir hissetti:
this.Then(/the search form should be displayed/, function(next) {
expect(element(by.model('searchTerms')).isPresent()).to.eventually.be.true;
expect(element(by.model('optionsBox')).isPresent()).to.eventually.be.true;
expect(element(by.button('Run Search')).isPresent()).to.eventually.be.true.and.notify(next);
});
Fakat arkadaşım söz çözünürlüğü karşılamak için, size zincire gerek iddia senin böyle() daha sonra bekler:
this.Then(/the search form should be displayed/, function(next) {
element(by.model('searchTerms')).isPresent().then(function(result) {
expect(result).to.be.true;
}).then(function() {
element(by.model('optionsBox')).isPresent().then(function(result) {
expect(result).to.be.true;
}).then(function() {
element(by.button('Run Search')).isPresent().then(function(result) {
expect(result).to.be.true;
next;
});
});
});
});
ikincisi benim için gerçekten yanlış geliyor, ama eski ya doğru olup olmadığını gerçekten bilmiyorum. Sonunda anladığım şekilde(), o zaman() 'e benzer şekilde çalışır, çünkü devam etmeden önce çözme vaadini bekler. Önceki örneğin her bekleyiş() çağrısını beklemek için beklemesini beklerim ve sonraki adımda ilerlemek için salatalık işaretini bildirmek için son beklemede() notify() öğesini kullanarak sonraki() öğesini çağırır.
daha karışıklığa eklemek için Gözlemlediğim diğer meslektaşları bu gibi onların beklediği yazın:
expect(some_element).to.eventually.be.true.then(function() {
expect(some_other_element).to.eventually.be.true.then(function() {
expect(third_element).to.eventually.be.true.then(function() {
next();
});
});
});
Yani sorulan Ben ima düşünüyorum şunlardır:
- mı uygulanıyor Yukarıdaki kite değil mi?
- Sonunda() gerçekten ne yapar? O zaman() gibi eşzamanlı davranışı zorlar mı?
- (ve şimdi) neyi gerçekten yapar? Bir sonraki() içindeki next() öğesini çağırmaktan farklı mıdır?
- Henüz bulamadığımız daha iyi bir uygulama kılavuzu var mı?
Şimdiden çok teşekkürler.
Her yerde kullanıldığında oldukça temiz görünüyor ve harika görünüyor! Katılıyorum, örneklere ve açıklamalara dayanarak, yukarıdaki örnekte zincirleme yapmak çok mantıklı görünmektedir. İletici'de test etmek için biraz yeniyiz, bu yüzden bizim için tüm yeni bölge. Belki de gelecekte en iyi uygulamalar rehberi yazmayı düşüneceğiz. :) –