Я следую учебнику по 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
Любые идеи, почему он ведет себя по-разному только для уничтоженияФункция между разработкой и тестовой средой?