1
我想测试我的控制器。一切都很好,直到我试图测试update
行动。如何在使用minitest的Rails中测试控制器的更新方法?
这是我的测试
require 'test_helper'
class BooksControllerTest < ActionController::TestCase
test "should not update a book without any parameter" do
assert_raises ActionController::ParameterMissing do
put :update, nil, session_dummy
end
end
end
这是我的控制器
class BooksController < ApplicationController
(...)
def update
params = book_params
@book = Book.find(params[:id])
if @book.update(params)
redirect_to @book
else
render 'edit'
end
end
(...)
def book_params
params.require(:book).permit(:url, :title, :price_initial, :price_current, :isbn, :bought, :read, :author, :user_id)
end
end
我的应用程序的书籍控制器路线如下:
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
当我运行rake test
我得到:
1) Failure:
BooksControllerTest#test_should_not_update_a_book_without_any_parameter [/Users/acavalca/Sites/book-list/test/controllers/books_controller_test.rb:69]:
[ActionController::ParameterMissing] exception expected, not
Class: <ActionController::UrlGenerationError>
Message: <"No route matches {:action=>\"update\", :controller=>\"books\"}">
---Backtrace---
test/controllers/books_controller_test.rb:70:in `block (2 levels) in <class:BooksControllerTest>'
test/controllers/books_controller_test.rb:69:in `block in <class:BooksControllerTest>'
---------------
那么,我在这里错过了什么?我已经完成了搜索,但找不到任何东西。只有几个RSpec的例子,看起来和我所做的很相似,但我还是没有任何线索。
呃!它的工作,谢谢! :) –
没问题!一定要将这个回答标记为答案! – MrDanA