Rspec 3.6, ข้อผิดพลาด Rails 5: จำนวนอาร์กิวเมนต์ไม่ถูกต้อง (ให้ 2, คาดหวัง 1) สำหรับคำขอ 'โพสต์'

ฉันเพิ่งเริ่มโปรเจ็กต์ใหม่ใน Rails 5 (โปรเจ็กต์แรกของฉัน แม้ว่าฉันจะมีหลายโปรเจ็กต์ใน Rails 4.x.) และกำลังประสบปัญหากับข้อกำหนดของคอนโทรลเลอร์

describe RequestsController, :type => :controller do

  it "receives new request" do
    post :accept_request, my_params
  end

end

ส่งคืนข้อผิดพลาด:

 Failure/Error: post :accept_request, my_params

 ArgumentError:
   wrong number of arguments (given 2, expected 1)

ฉันเข้าใจว่ามีการเปลี่ยนแปลงในกลยุทธ์การทดสอบที่ต้องการสำหรับคอนโทรลเลอร์ที่มี Rails 5 ตามที่ระบุไว้ใน Everyday Rails โดยเฉพาะการเปลี่ยนการทดสอบคอนโทรลเลอร์ไปเป็นข้อกำหนดเฉพาะของคำขอ แต่ไม่มีคำพูดเกี่ยวกับการเปลี่ยนแปลงวิธีการทดสอบคอนโทรลเลอร์ขั้นพื้นฐานนี้


person Nick    schedule 24.05.2017    source แหล่งที่มา


คำตอบ (1)


ดูเหมือนว่า Rails 5 คาดหวังอาร์กิวเมนต์ของคำหลักแทนที่จะเป็นอาร์กิวเมนต์แฮช ซึ่งเป็นการเปลี่ยนแปลงจากเวอร์ชันก่อนหน้า นอกจากนี้ อาร์กิวเมนต์แรกยังเป็น URL แทนที่จะเป็นการกระทำ พยายาม

post some_url, params: some_hash
person zetetic    schedule 24.05.2017
comment
สุดยอด! คุณบอกฉันได้ไหมว่าคุณพบสิ่งนี้ได้อย่างไร? หรือเอกสารเพิ่มเติมเกี่ยวกับข้อโต้แย้งของคำหลัก? ฉันค้นหามาพอสมควรแล้ว รวมถึงบันทึกการอัปเกรดของ Rails และส่วนการอัปเกรด GitHub ของ RSpec และสิ่งนี้ยังคงหลบเลี่ยงฉันอยู่ ความช่วยเหลือเล็กๆ น้อยๆ เกี่ยวกับวิธีการอัปเดตสิ่งต่าง ๆ เช่นนี้หรือการอัพเดต Rails 5 อื่น ๆ ให้ดีขึ้น - person Nick; 25.05.2017
comment
นอกจากนี้ FWIW post ยังคงยอมรับเพียงการดำเนินการ และไม่จำเป็นต้องมี URL - person Nick; 25.05.2017
comment
สำหรับสิ่งที่ฉันพบสิ่งนี้ ฉันได้ตอบคำถามเกี่ยวกับการทดสอบคอนโทรลเลอร์มาหลายปีแล้ว ดังนั้นฉันจึงรู้ทันทีว่าข้อความนี้ใช้ได้กับเวอร์ชันก่อนหน้า นั่นทำให้แคบลงเหลือเพียงการเปลี่ยนแปลงใน Rails 5 การค้นหาอย่างรวดเร็วนำไปสู่การโพสต์บล็อกนี้: blog.bigbinary.com/2016/04/19/ โดยกล่าวถึงการเปลี่ยนไปใช้อาร์กิวเมนต์ของคำหลัก - person zetetic; 26.05.2017
comment
ข้อมูลที่ดีในบทความนั้น ไม่แน่ใจว่าฉันพลาดไปได้อย่างไร ขอบคุณ! - person Nick; 26.05.2017
comment
อาร์กิวเมนต์แรกไม่ใช่ URL อย่างแน่นอน แต่เป็นชื่อการกระทำ เหตุใดจึงเป็นคำตอบที่ยอมรับได้ - person Andrew Koster; 26.09.2019
comment
@AndrewKoster ดู github.com/rails /ราง/หยด/. ต้องใช้เส้นทางหรือ URL คู่มือการทดสอบ Rails ยังใช้ url ในตัวอย่างด้วย ณ การทดสอบคอนโทรลเลอร์ Rails 5 เป็นคลาสย่อยของ ActionDispatch::IntegrationTest ก่อน Rails 5 พวกเขาได้รับมาจาก ActionController::TestCase ซึ่งใช้ชื่อการดำเนินการ - person zetetic; 27.09.2019
comment
ใช่ ดูเหมือนว่าฉันกำลังทำงานจากเอกสารที่ล้าสมัย เราไม่ควรจะใช้การทดสอบคอนโทรลเลอร์อีกต่อไป แต่ถูกแทนที่ด้วยการทดสอบคำขอ (ซึ่งใช้ URL เป็นอาร์กิวเมนต์แรก) - person Andrew Koster; 27.09.2019