我正在使用Rails 4.0构建RESTful JSON API并使用mongoid作为我的数据库。我正在使用RSpec测试我的一个控制器的destroy动作。但是,当我运行我的测试时,我收到ActionController :: UrlGenerationError:因为Rails无法找到相应的路由。奇怪的是我的destroy动作在我的routes.rb文件和我在同一资源中的其他控制器动作中明确定义。
describe "DELETE 'delete credit cards'" do
before do
@credit = CreditCard.new(cc_last4: Random.rand(1234) )
end
it "should return a successful json response" do
params = {comicbook_uid: @user.comicbook_uid.to_s ,
notebook_token: @user.comicbook_token,
cc_id: @credit.id, format: :json }
delete :destroy, params
body_hash = JSON.parse response.body
expect(body_hash["success"]).to eql true
end
在我的终端中生成的错误是:
Failure/Error: delete :destroy, params
ActionController::UrlGenerationError:
No route matches {:comicbook_uid=>"52decf924761625bdf000000", :comicbook_token=>"sfsakjhfk",
:cc_id=>BSON::ObjectId('52decf924761625bdf020000'),
:format=>:json, :controller=>"credit_cards",
:action=>"destroy"}
我的信用卡资源路线如下:
resources :credit_cards, only: [:create, :index, :destroy],
:defaults => { :format => 'json'}
提前感谢您,希望能尽快帮助我!
答案 0 :(得分:0)
您没有传递id
属性,这是您实际需要的唯一参数。此外,由于您使用@credit
创建CreditCard.new(...)
对象,因此在将其持久保存到数据库之前,它实际上不会有ID。
替换:
it "should return a successful json response" do
params = {comicbook_uid: @user.comicbook_uid.to_s ,
notebook_token: @user.comicbook_token,
cc_id: @credit.id, format: :json }
使用:
it "should return a successful json response" do
params = {id: @credit.id, format: :json }
并确保坚持使用CreditCard(或设置模拟期望将其销毁)。