You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单元测试报错:参数数量错误(给定0,预期1..2)——控制器测试求助

Fixing "ArgumentError: wrong number of arguments (given 0, expected 1..2)" in Your Stories Controller Tests

Hey there, since you're new to Rails testing, this error is super common—let's break down the most likely causes and how to fix them step by step:

Common Culprits & Quick Fixes

1. Forgetting Required Params in Test Requests

Rails controller test methods like get, post, patch often need specific parameters to work with your controller actions. For example, if you're testing the show action (which fetches a single story), you must pass the id parameter of the story you want to load.

Wrong:

test "loads a story" do
  get :show # No ID passed here—Rails doesn't know which story to fetch!
  assert_response :success
end

Right:

test "loads a story" do
  # Pull a pre-defined story from your stories.yml fixture
  test_story = stories(:sample_story)
  # Pass the ID as a parameter
  get :show, params: { id: test_story.id }
  assert_response :success
end

2. Missing Params for Create/Update Actions

If you're testing create or update, your controller probably expects a hash of story attributes. Skipping these will trigger the argument error too.

Wrong:

test "creates a story" do
  post :create # No story attributes provided!
  assert_redirected_to story_path(assigns(:story))
end

Right:

test "creates a story" do
  post :create, params: { 
    story: { title: "My First Story", content: "Testing is fun!" } 
  }
  assert_redirected_to story_path(assigns(:story))
end

3. Broken Controller Logic

Double-check your stories_controller.rb to make sure none of your action methods are calling functions with missing arguments. For example, if you have a line like:

def show
  @story = Story.find() # Oops—no ID passed to find()!
end

That would throw exactly the error you're seeing. Fix it by using the parameter from the request:

def show
  @story = Story.find(params[:id])
end

4. Fixture Configuration Issues

Take a quick look at your stories.yml to ensure all entries have the required fields your controller expects. If a fixture is missing a critical attribute, and your test tries to use it without supplementing the data, that could also cause problems.

If You're Still Stuck

Share snippets of:

  • The specific test in stories_controller_test.rb that's failing
  • The corresponding action in stories_controller.rb
  • A sample entry from stories.yml

That’ll help narrow down the exact issue!

内容的提问来源于stack exchange,提问作者thibault derennes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:30:35