2013-08-13 15 views
5

Mam kilka testów rspec i około 30 z nich to testy bezgłowe przez kapibarę/poltergeista. Za każdym razem, gdy przeprowadzam testy lokalnie, wszystkie 100% testów przechodzi.Testy rspec/capybara/poltergeist przechodzą w 100% lokalnie, losowe testy kończą się niepowodzeniem na serwerze CI zespołowego

Niedawno skonfigurowałem serwer ciągłej integracji dla zespołu firmy i wyniki testów były bardzo niespójne.

Przeprowadziłem testy 10 razy, nie robiąc żadnych zmian między testami. Tylko 1 runda minęła 100%. Pozostali mieli 1-2 awarie (większość z nich nie była taka sama), wszystkie związane z testowaniem bezgłowego przeglądarki. Oto przykład jednego z awariami:

ActionView::Template::Error: Couldn't find Spree::Address with id=1072978592 

Stack trace: 
./app/models/spree/order_decorator.rb:50:in `initialize_default_address' 
./app/models/spree/order_decorator.rb:42:in `initialize_shipment' 
./app/views/layouts/core.html.erb:23:in `_8cb98e121af585621c1d08e3ec1f6022' 
./app/views/layouts/default.html.erb:14:in `_588b3208edc213a939dffd2ad73f4f26' 

Ta porażka jest dziwne bo zgaszone funkcję, która wygląda adresu z identyfikatora i zwraca model factorygirl. Nie mam tego problemu lokalnie.

Oto kolejny błąd z jednego z przebiegów testowych:

Capybara::ExpectationNotMet: expected to find link "10" but there were no matches 

Stack trace: 
./spec/features/simply_ship_spec.rb:102:in `block (2 levels) in <top (required)>' 

Ponownie, gdy uruchamiam to lokalnie, ten błąd się nie dzieje, a kiedy przejść do selenu i oglądać test, link wyraźnie tam jest.

Oba te błędy (nie wszystkie, ale kilka przykładów) zdarzały się indywidualnie, w różnych seriach, bez wykonywania jakichkolwiek aktualizacji projektu. Czy ktoś ma jakieś pomysły, dlaczego tak się dzieje?

rspec barierki 2.14.0 Kapibara 2.1 poltergeist 1.3.0 szyny 3.2.14 Ruby 1.9.3 P448

Odpowiedz

2

Trudno powiedzieć, nie widząc kodu, ale wygląda na to, że możesz mieć warunki wyścigu w swoim kodzie. Jeśli twój skrypt działa szybciej niż kod aplikacji, dostaniesz sporadyczne awarie w ten sposób.

Możesz sprawdzić, gdzie znajdują się te awarie i upewnić się, że aplikacja została złapana przed kontynuowaniem.