Ruby on Rails 5, Rspec 3.8, функция уничтожения тестовой среды действует как функция show - PullRequest
0 голосов
/ 26 ноября 2018

Я следую учебнику по restaurantly Rails, одновременно внося свои собственные изменения, когда сталкиваюсь с проблемами версии (в основном синтаксиса) между Rails версии 4 и Rails версии 5, которую я использую.

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

rspec spec/features/restaurants_spec.rb

Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:41471
.F

Failures:

  1) destroy links work displays Restaurantly Spots!
     Failure/Error: expect(page).to have_no_content 'mc ruby'
       expected not to find text "mc ruby" in "mc ruby"
     # ./spec/features/restaurants_spec.rb:27:in `block (3 levels) in <top (required)>'

Finished in 7.25 seconds (files took 2.24 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/features/restaurants_spec.rb:20 # destroy links work displays Restaurantly Spots!

Я запустил puma -e 'test', чтобы вручную запустить приложение в «тестовой» среде и в браузере самостоятельно выполнить действия контроллера.Я обнаружил, что у меня такое же неудачное поведение.Все мои определенные действия, включая create, edit, update и show, работали, как и ожидалось.Однако destroy действовал как show и просто отображал страницу показа для элемента вместо этого или перенаправлял в корень и удалял элемент.

Все это работает как положено, если я запускаю rails server в "разработке""окружающая среда, включая функцию destroy.

Вот несколько разных частей моего приложения, если оно помогает:

app/controllers/restaurants_controller.rb:



    def destroy
        @restaurant = Restaurant.find_by_id params[:id]
        @restaurant.destroy
        redirect_to root_path
      end

app/views/restaurants/index.html.haml

.row
  .large-8.columns.large-centered
  %h3.subheader.center
    Restaurantly Spots!

.row
  .large-8-columns.large-centered
    - @restaurants.each do |restaurant|
      %h5.subheader
        = restaurant.name
        = link_to "edit", edit_restaurant_path(restaurant)
        = link_to "destroy", restaurant_path(restaurant), method: :destroy

Часть моего Gemfile, включая разработку, тестовые гемы:

group :test, :development do
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  gem 'capybara'
  gem 'pry'
  gem 'pry-byebug'
end

Однажды я отбросил тестовую базу данных, а затем снова создал ее.Я сделал это так же, как изначально создал его вместе с базой данных разработки, запустив bundle exec rake db:create, затем bundle exec rake db:migrate и, наконец, bundle exec rake db:test:prepare.

config/database.yml

development:
  adapter: postgresql
  encoding: unicode
  database: restaurantly_dev
  pool: 5
  host: ""
  timeout: 5432


test:
  adapter: postgresql
  encoding: unicode
  database: restaurantly_test
  pool: 5
  host: ""
  timeout: 5432

Любые идеи, почему он ведет себя по-разному только для уничтоженияФункция между разработкой и тестовой средой?

1 Ответ

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

Спасибо @arieljuod за указание на то, что у меня был метод :destroy, когда он должен был быть :delete.Возможно, я добавил это случайно во время устранения неполадок, поэтому я не могу сказать, что это была проблема с самого начала.Тем более, что функция удаления работала в среде разработки, а не в тестовой среде.Однако после внесения изменений, которых я раньше не видел, я получал ошибку маршрутизации, и он все еще пытался POST вместо DELETE.

Я прочитал ответ и обнаружил, что после удаления // = require jquery2 and // = require jquery_ujs from the application.css` файл, который, кажется, работает нормально вкак производство, так и тестирование.Я не знаю, почему они были там или почему это исправило проблему.Мои функциональные тесты теперь также проходят.

...