/ / Os testes falham em travis, que passam local - javascript, ruby, capivara, travis-ci, poltergeist

Testes falham no travis, que passam local - javascript, ruby, capivara, travis-ci, poltergeist

Meus testes que ficam verdes locais, estão ficando vermelhos em travis. É sobre este código:

And I change the year to "nineteen-ninenty-seven"                                                                           # features/step_definitions/application_steps.rb:9
And I attempt to save the changes                                                                                           # features/step_definitions/application_steps.rb:17
Then I should see a message indicating that the data is invalid                                                             # features/step_definitions/application_steps.rb:26
expected to find text "Value must be of type integer." in "Provider configurations root name artist year" (RSpec::Expectations::ExpectationNotMetError)
./features/step_definitions/application_steps.rb:27:in `/^I should see a message indicating that the data is invalid$/"
features/editing_resources.feature:52:in `Then I should see a message indicating that the data is invalid"

Isso está em meu support / capybara.rb

require "capybara/cucumber"
require "capybara/poltergeist"

Capybara.app = App.new
Capybara.javascript_driver = :poltergeist
Capybara.default_wait_time = 10

É sobre este código:

When(/^I change the year to "(.*?)"$/) do |year|
find("input[name="root[year]"]").set year
end

When(/^I attempt to save the changes$/) do
find("input[type=submit]")
end

Then(/^I should see a message indicating that the data is invalid$/) do
expect(page).to have_content("Value must be of type integer.")
end

O problema:

Quando eu executo os testes locais, eles ficam verdes. Eu depurei lá. Tenho certeza de que o código funciona bem. Os campos existem e são preenchidos com os dados corretos. Quando uso o pry em meus testes locais no ponto em que espero a mensagem, eu "fonte" (ou html) e eu posso encontrar o texto sozinho. Em travis / ubuntu, isso não funciona. Posso confirmar que isso não funciona, porque entrei em contato com o Travis e eles me deram uma VM de um dia onde dupliquei o problema.

Para resolver isso, tentei várias coisas, aumentei o tempo de espera, tentei selênio / webkit e selênio com chrome / firefox. Todos trabalham localmente, mas não consigo fazer com que funcionem adequadamente em travis.

O que eu quero alcançar é que o teste valide se o usuário vê uma mensagem que está sendo criada quando um campo não é preenchido corretamente (texto em campo inteiro neste exemplo).

A mensagem é criada pelo editor Json. https://github.com/jdorn/json-editor E é assim no código:

<small class="error">Value must be of type integer.</small>

Uma explicação lógica na minha opinião: no travis, o dom não obtém a versão mais recente que deveria carregar após uma atividade ser executada (como fill_in ou set) e local isso funciona.

Espero que alguém tenha uma explicação e uma solução.

Respostas:

1 para resposta № 1

Embora eu não possa fornecer uma resposta para seu problema exato, posso tentar ajudá-lo a depurar o problema com as informações fornecidas.

Quanto ao Poltergeist:

Poltergeist permite que você faça capturas de tela em pontos específicos do seu teste

Dependendo de seus testes, uma coisa de que você pode precisar são algumas fontes. Se você estiver recebendo erros em um IC que não ocorrem durante o desenvolvimento, tente fazer algumas capturas de tela

Eu tentaria usar page.save_screenshot antes e depois dos pontos que você identificou e veja quais são as diferenças entre local / travis.

EDIT: Há também uma joia para capivara que tira screenshots sempre que um teste falha. Encontre mais informações aqui: Capivara-Screenshot