扶手:工厂和协会的功能测试
-
21-09-2019 - |
题
我试图找出为什么这个是行不通的。
让我们说你三种模式,用户,Foo和酒吧。为了要创建的条用户必须首先创建和验证一个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。
这是我的控制器:
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
这是重定向函数I具有其中被称为我的栏控制器我的应用程序的控制器:
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
这里的富工厂:
Factory.define :foo do |f|
#attributes
f.valid true
f.association :user
end
相反,我重定向到“ https://test.host:80/foos/new一>”控制器不承认用户具有一个Foo ...
在会话有效,因此这似乎是一个工厂的问题,但我不知道它是什么。
解决方案
我假定这是factory_girl。你调用Factory.build
它不保存任何东西到数据库中,所以你从来没有需要为您的关联外键的值。切换那些Factory.create
,你应该看到一个区别。
不隶属于 StackOverflow