Итак, вот странная проблема: когда я запускаю свое местное приложение для рельсов и просматриваю http://localhost:3000/static_pages/help Я вижу страницу, которую я там создал. Однако тестовый сценарий, который я написал, говорит иначе.рубиновый рельс тестовый случай не работает, но реальное приложение работает
static_pages_controller_test.rb
require 'test_helper'
class StaticPagesControllerTest < ActionController::TestCase
test "should get home" do
get :home
assert_response :success
end
test "should get help" do
puts static_pages_help_url
puts static_pages_help_path
get static_pages_help_url
assert_response :success
end
end
Это терпит неудачу с этой ошибкой, Вывод $ бен/тест грабли:
Running:
..http://test.host/static_pages/help
/static_pages/help
E
Finished in 0.466745s, 8.5700 runs/s, 4.2850 assertions/s.
1) Error.
StaticPagesControllerTest#test_should_get_help:
ActionController::UrlGenerationError: No route matches {:action=>"http://test.host/static_pages/help", :controller=>"static_pages"}
test/controllers/static_pages_controller_test.rb:12:in `block in <class:StaticPagesControllerTest>'
Вот routes.rb
Rails.application.routes.draw do
get 'static_pages/home'
get "static_pages/help"
end
и здесь в static_pages_controller.rb
class StaticPagesController < ApplicationController
def home
end
def help
end
end
и эти два файла
app/views/static_pages/home.html.erb
app/views/static_pages/help.html.erb
существует, так как я могу также увидеть их при переходе к/static_pages/помощь в моем браузере. Я искал в Интернете часами, никаких подсказок.
$ rails --version
Rails 4.2.7.1
$ ruby --version
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
Должно быть, что-то не хватает. Пожалуйста помоги.
Большое спасибо за быстрый ответ! Что меня полностью озадачивает: почему автор этой страницы https://www.railstutorial.org/book/static_pages#code-default_controller_test написал свой тест следующим образом? Хотя на самом деле это не сработает! Это стоило мне часов ... – CodeKid
@ Кодекид, не недооценивайте Хартл. Он знает свои вещи. Проблема в том, что если вы посмотрите на пример кода, данный Hartl, то на самом деле это «интеграционный тест», а то, что вы пытаетесь сделать, - это «спецификация контроллера». См. Подпись класса кода Hartl и ваш. Ваш «StaticPagesControllerTest» наследуется от «ActionController :: TestCase», а его реализация наследуется от «ActionDispatch :: IntegrationTest». Проще говоря, код Hartl пытается посетить URL-адрес и посмотреть, успешный ответ. Но спецификация контроллера отличается. –
Это отвечает тому, что я действительно хотел узнать. Теперь все ясно. Огромное спасибо. – CodeKid