JSON を POST 経由でメンバー ルート エンドポイントに送信する rspec テストを作成しています。しかし、そうすると「ルートが一致しません」というエラーが表示されます。このエンドポイントがメンバー ルートであるため、何か追加する必要があるかどうかはわかりません。または、JSON を送信しているため、HTTP 要求ヘッダーが不足しているだけです。助けてください。
これは私が持っているものです:
仕様:
describe "#endpoint" do
context "type 1" do
before(:each) do
post :create, @params.merge(:abc => {:first_user_id => @user1.id, :second_user_id => @user2.id})
@mashup = assigns(:mashup)
end
it "should post the results successfully" do
units = [...]
users = [...]
params = @params.merge(:mashup_outcome => {:status => "success", :assetName => "MashupAssetName", :winningUserId => @user1.id}, :mashup_id => @mashup.id, :version_number => 1, :user_id => @user1.id, :id => @mashup.id ,:users => :users).to_json
@request.env["CONTENT_TYPE"] = "application/json"
#had to have a param key for my params below in order to bypass the NoMethodError
#In actual request body, it's just a JSON
post :over, :mashup => params
@mashups.in_progress.should be_false
end
end
context "type 2" do
before(:each) do
...
end
it "should post the results correctly" do
...
end
end
ルート:
namespace :mashup do
resources :mashups do
member do
post :endpoint
end
end
コントローラ:
def endpoint
if @mashup.complete_mashup(params)
render :json => api_success(@mashup.dpoints)
else
render :json => api_error({})
end
end
エラー:
Failure/Error: post :endpoint, :mashup => params
ActionController::RoutingError:
No route matches {:mashup => "{...<JSON>...}", :controller => "api/mashup/mashups", :action => "endpoint"}