【问题标题】:RSpec Error: Mock "Employee_1" received unexpected message:to_ary with(no args)RSpec 错误:模拟“Employee_1”收到意外消息:to_ary with(no args)
【发布时间】:2011-03-07 17:52:51
【问题描述】:

我的应用程序有两个模型:User 和 Employee,它们的关系是 user has_many employees。

当我尝试为员工控制器编写 Rspec 测试用例时:

describe "GET 'edit'" do
  it "should get user/edit with log in" do
    log_in(@user)
    employee = mock_model(Employee, :id=>1, :user_id=>@user.id)
    get :edit, :id=>employee
    response.should be_success
  end
end

我得到的结果是:

....F 失败: 1)EmployeesController GET 'edit'应该通过登录获得用户/编辑 失败/错误:获取 :edit, :id=>employee 模拟“Employee_1”收到意外消息:to_ary with (no args) # C:在“查找”中 # ./app/controllers/employees_controller.rb:41:in `edit' # ./spec/controllers/employees_controller_spec.rb:51:in `block (3 levels) in ' 4.31秒完成 5 个示例,1 个失败

有人可以帮我解决这个问题吗?谢谢

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    我认为问题在于您使用的是 mock_model,如果您在未明确创建期望的模型上调用方法,则会引发错误。在这种情况下,您可以使用 stub_model 创建员工,因为您没有对实际对模型进行的调用进行检查。

    describe "GET 'edit'" do
    
      it "should get user/edit with log in" do
        log_in(@user)
        employee = stub_model(Employee, :id=>1, :user_id=>@user.id)
        get :edit, :id=>employee
        response.should be_success
      end
    end
    

    【讨论】:

      【解决方案2】:

      Rails 能够从真实的模型实例中推断出 ID,这就是它的工作原理:

      @employee = Employee.create
      get :edit, :id => @employee
      

      这不适用于mock_model,原因我不清楚。您可以简单地显式传入 ID:

        employee = mock_model(Employee, :id => 1, :user_id=>@user.id)
        get :edit, :id => employee.id # or just :id => 1
      

      【讨论】:

        【解决方案3】:

        我认为问题出在 mock_model 上,您可以使用 double。

        describe "GET 'edit'" do
        
          it "should get user/edit with log in" do
            log_in(@user)
            employee = double('employee', :id=>1, :user_id=>@user.id)
            get :edit, :id=>employee
            response.should be_success
          end
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          • 1970-01-01
          • 2022-01-13
          相关资源
          最近更新 更多