RSpec错误:模拟"Employee_1"收到意外消息:to_ary with(no args)

Sou*_*ikj 4 rspec ruby-on-rails

我的应用程序有两个模型:用户和员工,他们的关系是用户has_many员工.

当我尝试为员工控制器编写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
Run Code Online (Sandbox Code Playgroud)

我的结果如下:

....F

Failures:

  1) EmployeesController GET 'edit' should get user/edit with log in
     Failure/Error: get :edit, :id=>employee
       Mock "Employee_1" received unexpected message :to_ary with (no args)
     # C:in `find'
     # ./app/controllers/employees_controller.rb:41:in `edit'
     # ./spec/controllers/employees_controller_spec.rb:51:in `block (3 levels) in '

Finished in 4.31 seconds
5 examples, 1 failure

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

Ruy*_*iaz 6

我认为问题是你正在使用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
Run Code Online (Sandbox Code Playgroud)