1

我正在使用 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)>'

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

编辑。我试过这个

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"}
4

3 回答 3

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
于 2012-08-02T18:45:27.043 回答
1

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

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

在你的 spec_helper.rb 替换这个

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

ENV["RAILS_ENV"] ||= 'development'
于 2012-08-02T19:08:24.003 回答
0

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

正在发生的事情是 rails 试图在 cars#new 中创建一辆新车(这意味着cars_controllernew行动,但你没有那条路线。

跑去rake routes看看你有什么路线并发布。

于 2012-08-02T18:48:06.590 回答