簡體   English   中英

在Rails和minitest中,模擬模型的POST創建請求時如何命名參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM