我正在构建一个Ruby on Rails应用程序,其中包含常见的模型,视图和控制器。Rspec Rails:使用多模型表单测试控制器方法'创建'
在我的控制器之一中的“创建”操作应该创建两个不同模型的实例。这里是我的代码:
def create
@league = League.new(params[:league])
@user = @league.users.build(params[:user])
... .save conditions appended ...
end
所以,当你通过POST请求/联赛,你会得到联盟的新实例和用户的新实例调用“创造”通过LeaguesController。我还希望新的User实例继承新的League实例的ID,因此它可以用作外键将实例链接在一起。
def create
@league = League.new(params[:league])
@user = @league.users.build(params[:user])
@league_id = @league.id
@user.update_attribute('league_id', @league_id)
... .save conditions appended ...
end
用户模型已经belongs_to
联盟模式,它has_many
用户:这是一群有成就。
上面的代码工作得很好,通过手动测试验证。但是,我不能在我的生活中弄清楚如何使用Rspec自动化这些测试。我试图成为一个好孩子,并使用测试驱动设计,但这让我很难过。
问题是我不知道如何在我的测试中访问新创建的联盟和用户实例的属性。我试图这样做,用下面的代码:
describe LeaguesController do
describe 'new league and user' do
it 'should create a new user with a league_id equal to the new leagues id'
@league_attr = { :name => "myleague", :confirmation_code => "mycode", :id => 5}
@user_attr = { :username => "myname", :password => "mypass"}
post :create, :user => @user_attr, :league => @league_attr
assigns(:league_id).should eql(5)
end
end
end
但对于:league_id
我是新来的,一般和RSpec特别是两个编程值测试返回nil
,所以我真的很感激任何人可能提供的帮助!
感谢Tigraine,我会检查出撬,我觉得在这样信心的方法是窝国王(它的行为如预期),但我想使用自动化Rspec的,这样我可以确保我的应用程序变得更加复杂,我不打破这个功能测试。 –