我不确定你到底想测试什么,而且我认为在哪里可以使用哪些方法存在一些混淆,所以我将尝试举例说明Routing specs、Request Specs、Controller specs和Feature specs,以及希望其中之一适合您。
路由
如果你想确保你的根路径被路由到home#index
操作,路由规范可能是合适的:
规范/路由/routing_spec.rb
describe "Routing" do
it "routes / to home#index" do
expect(get("/")).to route_to("home#index")
end
end
要求
如果您想确保index
模板在对根路径的请求中呈现,请求规范可能是合适的:
规范/请求/home_requests_spec.rb
describe "Home requests" do
it 'successfully renders the index template on GET /' do
get "/"
expect(response).to be_successful
expect(response).to render_template(:index)
end
end
控制器
如果您想确保模板在您的操作的index
请求上呈现,控制器规范可能是合适的(在这种情况下与请求规范非常相似,但只关注控制器):index
HomeController
规格/控制器/home_controller_spec.rb
describe HomeController do
describe "GET index" do
it "successfully renders the index template" do
expect(controller).to receive(:index) # this line probably of dubious value
get :index
expect(response).to be_successful
expect(response).to render_template(:index)
end
end
end
特征
如果您想确保所呈现的页面home#index
具有某些特定内容,则功能规范可能是合适的(也是您可以使用Capybara 方法的唯一地方,例如visit
,取决于您的 Rails/RSpec 版本):
规格/功能/home_features_spec.rb
feature "Index page" do
scenario "viewing the index page" do
visit root_path
expect(page).to have_text("Welcome to my awesome index page!")
end
end