ActiveRecord :: RecordNotFound:找不到ID =的用户

时间:2012-08-02 18:43:34

标签: ruby-on-rails-3 testing rspec rspec-rails

我正在使用rspec测试我的应用程序,我读到我必须在测试环境中创建一个用户但不知道如何....这里是代码:

require 'spec_helper'

    describe CarsController do
    describe "GET 'new'" do
            it "should be successful" do
            visit new_user_car_path(:user_id=>"28")#also try (current_user) but nothing
            response.should be_success
            end
        end
    end

当我运行它时,我收到了这条消息

Failure/Error: visit new_user_car_path(:user_id=>"28")
 ActiveRecord::RecordNotFound:
   Couldn't find User with id=28
 # ./app/controllers/cars_controller.rb:3:in `new'
 # ./spec/controllers/tanking_logs_controller_spec.rb:6:in `block (3 levels) in <top (required)>'

如果您需要更多代码,请告诉我

EDIT。我试过这个

require 'spec_helper'

describe CarsController do
describe "GET 'new'" do
    it "should be successful" do
        #user = User.create(...)
        @user = {:email => "user@example.com", :password => "foobar", :password_confirmation => "foobar" }
        visit new_user_car_path(@user) 
        response.should be_success
    end
end
end

我现在收到了这个错误:

 No route matches {:action=>"new", :controller=>"cars", :email=>"user@example.com", :password=>"foobar", :password_confirmation=>"foobar"}

3 个答案:

答案 0 :(得分:3)

您的测试数据库中没有ID为28的用户。您需要为测试数据库设定种子并使用您知道存在的用户的ID。

或者,按需创建新用户:

describe "GET 'new'" do
  it "should be successful" do
    user = User.create(...)
    visit new_user_car_path(user)#also try (current_user) but nothing
    response.should be_success
  end
end

答案 1 :(得分:1)

这可能会让您启动并运行,但这绝不是运行测试的好方法。

因此,如果您的开发数据库中有一个id = 28的用户,您可以告诉Rspec对此数据库而不是默认测试数据库运行测试。

在spec_helper.rb中 替换此

ENV["RAILS_ENV"] ||= 'test'

使用

ENV["RAILS_ENV"] ||= 'development'

答案 2 :(得分:0)

现在您的规范已更改,您收到路由错误。

正在发生的事情是,rails正在尝试在汽车中创建新车#new(这意味着cars_controllernew行动,但您没有这条路线。

运行rake routes以查看您拥有的路线并发布。