Тестирование сайта Jekyll с помощью rspec и capybara, получение причудливого случая гонки на старте rspec - PullRequest
0 голосов
/ 26 сентября 2018

Итак, проверьте это: он выглядит , как будто при запуске bundle exec rspec происходит гонка между jekyll serve и загрузкой puma / rspec.Иногда я запускаю команду, и мои тесты запускаются нормально.В других случаях я получаю сообщение об ошибке для каждого из моих spec-файлов: cannot load such file -- /path/to/project/sitename_jekyll/_layouts/spec/form_spec.rb, что интересно, потому что это не то место, где находятся мои spec-файлы.Они находятся в /path/to/project/sitename_jekyll/spec/form_spec.rb.

Что сумасшедшего, так это то, что я могу буквально просто повторять команду снова и снова и снова, и иногда она будет проходить и запускать тесты спецификаций в правильном месте, а иногда она будет искать ихв _layouts и ошибка.Вероятно, он работает правильно, может быть, один раз из трех или пяти попыток.В остальное время я получаю следующие ошибки:

Вот как выглядит мой spec_helper.rb: https://gist.github.com/johnhutch/2cddfafcde0485ff021501d5696c0c2d

А вот пример тестового файла: https://gist.github.com/johnhutch/a35d15c170f5fd9ca07998bf035d111d

Мой .rspec содержит только две строки: --color
--require spec_helper

И вот результат, как успешный, так и неудачный, вплотную: https://gist.github.com/johnhutch/7927d609170ef5c70a595735502b128d

HEEELLLLLP!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

В соответствии с супер полезными ответами Томаса Уолпола, это сработало:

спать 0,1, пока Capybara.app.compiling?

вставлено сразу после:

51 Capybara.app= Rack :: Jekyll.new (force_build: true)

в моем spec_helper.rb

Еще раз спасибо, Томас!

0 голосов
/ 26 сентября 2018

Похоже, что jekyll меняет текущий каталог при создании сайта, что, поскольку он запускается в потоке, также влияет на тесты, которые пытается выполнить RSpec (см. https://bugs.ruby -lang.org / Issues /9785 , почему Dir.chdir не является потокобезопасным) - что приводит к попыткам загрузки объектов из неправильных местоположений.

Потенциальным решением этой проблемы может быть ожидание создания сайта Jekyll перед тем, как фактически запуститьтесты.Комментарий в вашем spec_helper, кажется, утверждает, что кто-то думал, что передача force_build: true сделает это, но из-за быстрого прочтения кода jekyll-rack, я не думаю, что это правда, и вам действительно нужно ждать, пока compiling? вернетсяfalse (v 0.5) (complete? для возврата true в текущей ветке master), чтобы убедиться, что построение завершено (а также передача force_build).Это может быть сделано либо в режиме сна и проверки цикла (проще)

sleep 0.1 while <jekyll app>.compiling?

или (если используется основная ветвь) через мьютекс / условный Rack :: Jekyll, как в его наборе тестов - https://github.com/adaoraul/rack-jekyll/blob/master/test/helper.rb#L49

Примечание. Также проверьте мой комментарий о ваших тестах, которые на самом деле ничего не тестируют.

...