Я следую учебному пособию по Ruby on Rails, найденному здесь: http://rubyonrailstutor.github.io/. Прежде всего мне пришлось внести некоторые изменения, в основном методом проб и ошибок и поиска ошибок в Интернете.Во многом это связано с тем, что это старое руководство по старой версии Ruby и Rails.
Я использую рельсы 5.2.1 и Ruby 2.5.3, а также последнюю версию большинства драгоценных камней.Я успешно завершил урок до последнего rspec
теста, найденного здесь: http://rubyonrailstutor.github.io/new/restaurants-new-create/.
Когда я запускаю rspec spec/requests/restaurants_spec.rb
, я получаю следующую ошибку:
Failures:
1) RestaurantsController POST /restaurants complete params redirects to show
Failure/Error: expect(subject).to redirect_to restaurant_path(id:1)
Expected response to be a redirect to <http://www.example.com/restaurants/1> but was a redirect to <http://www.example.com/restaurants/new>.
Expected "http://www.example.com/restaurants/1" to be === "http://www.example.com/restaurants/new".
# ./spec/requests/restaurant_spec.rb:32:in `block (4 levels) in <top (required)>'
Finished in 0.60375 seconds (files took 1.47 seconds to load)
5 examples, 1 failure
Failed examples:
rspec ./spec/requests/restaurant_spec.rb:31 # RestaurantsController POST /restaurants complete params redirects to show
Мой контроллерто же, что и то, что использует автор учебника: https://github.com/rubyonrailstutor/restaurantly/blob/restaurants-new/app/controllers/restaurants_controller.rb.
Часть моего файла спецификации, которая не работает:
context "POST /restaurants" do
context "complete params" do
subject{ post "/restaurants", params: { name: "mcrails"}}
it "redirects to show" do
expect(subject).to redirect_to restaurant_path(id:1)
end
end
context "incomplete params" do
subject{ post "/restaurants", {}}
it "redirects to new" do
expect(subject).to redirect_to(new_restaurant_path)
end
end
end
Мой предмет немного отличается от того, как авториспользует это, и мне интересно, это то, что я ошибаюсь.Я изменил его, когда получил ошибку в нескольких аргументах, которая, по моему мнению, связана с различиями версий.Оригинал выглядит так:
restaurant = {restaurant: {name: "mcrails"}}
subject{ post "/restaurants", restaurant }
Что я изменил на это:
subject{ post "/restaurants", params: { name: "mcrails"}}
Файл спецификации автора на рельсах 4: https://github.com/rubyonrailstutor/restaurantly/blob/restaurants-new/spec/requests/restaurant_spec.rb.
Когда яя запускаю веб-сервер и создаю новый элемент, который он перенаправляет, чтобы # показать элемент должным образом.Однако тест rspec не проходит.Поэтому я считаю, что я не выполняю тест должным образом.Возможно из-за разницы версий и параметров, которые я передаю, но я не могу понять это.Мой опыт работы с Rails на данный момент минимален.