我在我的Rails应用程序中创建了一个路径:
scope 'product' do
get '/', to: 'product#sort', as: 'product'
end
然后我想用Capybara测试我的功能:
# spec/features/product_spec.rb
require 'spec_helper'
feature 'Product', type: :feature do
describe 'Main page' do
context 'Before login' do
it 'Show product list' do
visit product_path
expect(page).to have_content('Product List')
end
end
end
end
但是在我在终端上运行rspec之后,它向我展示了:
Failure/Error: expect(page).to have_content('Product List')
expected to find text "Product List" in "500 Internal Server Error"
为什么它给了我一个500错误?发生了什么?如何查看错误详细信息?
在我的控制器和视图中,我设置了@product_categories
:
在控制器中:
# app/controllers/product_controller.rb
class ProductController < ApplicationController
def sort
@product_categories = ProductCategory.all
@products = Product.all
end
end
在视图中:
# app/views/product/sort.html.erb
<h1>Product List</h1>
<% @product_categories.each do |category| %>
<%= category.name %>
<% end %>
<% @products.each do |product| %>
<%= product.name %>
<% end %>
是否有必要在规范测试源中定义该值?
答案 0 :(得分:0)
您正在课堂上调用.each
。我想你的意思是
@product_categories = ProductCategories.all
在您的控制器中。此外,按照惯例,您的控制器和视图文件夹名称应该是复数形式,因此products_controller.rb
具有类名ProductsController
和视图文件夹看起来像app/views/products/sort.html.erb
。在您的路线中,也会像'products#sort'
那样复数控制器。
至于你的测试,似乎你正在使用rspec和capybara DSL的混合。如果您使用功能,则不需要:type => :feature
。您需要将description
,context
和it
合并到scenario
中。请参阅此处,了解使用带有Rspec内置DSL部分的Capybara中的示例:https://github.com/jnicklas/capybara