[英]How do I include a newly created model object in my Rails API response to a post request?
[英]In Rails and minitest, how do I name my parameters when simulating a POST create request for my model?
我正在使用Rails 5和minitest。 如何在minitest中提交參數以模擬創建模型的POST請求? 我有這個測試
test "do create" do
person = people(:one)
score = 10
post ratings_url, params: {rating[person_id]: person.id, rating[score]: score}
# Verify we got the proper response
assert_response :success
end
但以上結果導致錯誤
localhost:myapp davea$ rails test test/controllers/ratings_controller_test.rb
Running via Spring preloader in process 30344
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require': /Users/davea/Documents/workspace/myapp/test/controllers/ratings_controller_test.rb:14: syntax error, unexpected ':', expecting => (SyntaxError)
url, params: {rating[person_id]: person.id, rating[score]: score
我將POST參數命名為“ rating [person_id]”和“ rating [score]”的唯一原因是,這就是在Rails中將表單呈現為HTML時它們被命名的原因。
編輯:響應給出的答案,我在測試中嘗試了這個
post ratings_url, params: { rating: { person_id: person.id, score: score} }
控制器看起來像
def save(params)
rating = Rating.new(rating_params)
rating.user = current_user
respond_to do |format|
我得到的錯誤是
Error:
RatingsControllerTest#test_do_create:
ActionController::UnknownFormat: ActionController::UnknownFormat
抱怨線
respond_to do |format|
您的參數哈希中的哈希鍵無效。
params: {rating[person_id]: person.id, rating[score]: score }
您不能使用rating[person_id]
並使用較新的哈希語法/,而需要在此處使用哈希火箭,例如:
params: {rating[person_id] => person.id, rating[score] => score }
這是假設您有一個帶有rating
的局部變量,稱為“ rating
” ...如果您實際上並未嘗試從名為“等級”的局部變量中獲取值,那么您可能需要更詳細地了解您的結構例如:
params: { rating: { person_id: person.id, score: score } }
當然...根據您正在編寫的測試類型,您可能不需要使用ratings_url
(也可以在有和沒有params
鍵的情況下進行嘗試),例如:
post :ratings, params: { rating: { person_id: person.id, score: score } }
post :ratings, rating: { person_id: person.id, score: score }
好吧,也許您的控制器為您提供了有關ActionController::UnknownFormat
的線索。 您應該檢查您的logs\\test.log
文件,以查看是否可以調試控制器對測試請求的響應。 我的直覺是你的控制器缺乏某些類型的respond_to
塊,或缺少模板/渲染特定響應類型。 也許它以JS的形式發布,並且您的控制器沒有對此做出響應,或者在某些情況下,您應該對以下任何類型進行響應:
respond_to do |format|
format.any {render :text => "I respond to any request format"}
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.