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 に答える