我想看一本我想测试的书。
我通过http://..../books/1
这是我在运行Rspec时遇到的错误:
1) books/show should display the book name
Failure/Error: render
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"books"}
以下是我使用Factory Girl进行的测试:
RSpec.describe "books/show", type: :view do
before(:each) do
@book = FactoryGirl.create(:book)
render
end
it "should display the book name" do
rendered.should contain(@book.name)
end
end
我认为我发现了错误,但我不明白。
在我的routes.rb
文件中,我有resources :books
如果我在控制台中执行rake路由,我会得到:
...
books GET /books(.:format) books#index
POST /books(.:format) books#create
new_book GET /books/new(.:format) books#new
edit_book GET /books/:id/edit(.:format) books#edit
book GET /books/:id(.:format) books#show
PATCH /books/:id(.:format) books#update
PUT /books/:id(.:format) books#update
DELETE /books/:id(.:format) books#destroy
...
为什么book
和bookS
之间的路线存在差异?我想这就是错误被提出的原因。
show动作仅适用于控制器book
,而不是bookS
。
答案 0 :(得分:0)
正如@PeterAlfvin建议的那样,错误在我看来。
在我的控制器中,我设置了一些与book
相关的变量,但我假设(现在我明白为什么不是)控制器在测试视图中被调用,并且应该在测试期间设置这些变量
因此,对于我视图中调用的每个变量,我创建了一个赋值行,现在一切正常。
assign(:my_variable, MY_VALUE)
引发了原始错误,因为我正在使用link_to
网址呈现nil
。