Railsの:機能テストでの工場との関連付け
-
21-09-2019 - |
質問
私は、これは仕事をしない理由を把握しようとしている。
レッツは、次の3つのモデル、ユーザー、fooとbarを言います。ユーザーを作成するバーためには最初のfooオブジェクトを作成し、検証する必要があります。
Class User #snip!
has_many :foos
has_many :bars
Class Foo #snip!
belongs_to :user
has_many :bars
Class Bar #snip!
belongs_to :user
belongs_to :foo
私は、ユーザーが有効なのfooを持つことなく、新しいバーを作成しようとした場合、それらはFooのための「新」アクションにリダイレクト機能テスト作業を取得しようとしています。
私は、リダイレクトのシナリオに問題がなかったです。私はセットアップに有効なのFooオブジェクトをユーザーに試してみて、バーのための「新しい」アクションを取得しようとすると、しかし、それはまだフー・コントローラの「新」アクションにリダイレクトされます。それはまだユーザーがfooを持っていることを認識しません。
ここに私のコントローラがあります:
class BarsControllerTest < ActionController::TestCase
setup :activate_authlogic
def setup
@request.env['HTTPS'] = nil
@user = Factory.build(:user)
@foo = Factory.build(:foo, :user => @user)
end
test "should get new when user has a valid foo" do
@request.env['HTTPS'] = 'on'
UserSession.create(@user)
get :new
assert_response :success
end
これは私が私のバーのコントローラに呼ばれている自分のアプリケーションのコントローラを持っているリダイレクト機能であります
def foo_required
if current_user && @current_user.foos.valid.empty? && @current_user.foos.empty?
flash[:notice] = "You must have a verified foo in order to create a Bar!"
redirect_to new_foo_path
elsif current_user && @current_user.foos.valid.empty?
flash[:notice] = "You must verify your foos in order to create a Bar!"
redirect_to foos_path
end
end
ここではFoo工場があります:
Factory.define :foo do |f|
#attributes
f.valid true
f.association :user
end
の代わりに私は https://test.host:80/foos/new」にリダイレクト>」コントローラは、ユーザは、AはFoo ...
があることを認めていませんセッションはこれが工場出荷時の問題のように思えるので有効ですが、私はそれが何であるかわからない。
解決
私は、これはfactory_girlであると仮定しています。あなたが関連するために必要な外部キーの値を持つことがないようにするには、データベースには何も保存しませんFactory.build
を呼んでいます。 Factory.create
にそれらを切り替えて、あなたは違いを確認する必要があります。
所属していません StackOverflow