我正在构建一个 Ruby on Rails 应用程序,其中包含各种常见的模型、视图和控制器。
我的一个控制器中的“创建”操作应该创建两个不同模型的实例。这是我的代码:
def create
@league = League.new(params[:league])
@user = @league.users.build(params[:user])
... .save conditions appended ...
end
因此,当您通过 LeaguesController 通过对 /leagues 的 POST 请求调用“create”时,您将获得一个新的 League 实例和一个新的 User 实例。我还希望新的 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
User 模型已经belongs_to
是 League 模型,即has_many
用户。
上面的代码工作得很好,花花公子,通过手动测试验证。但是,我一生都无法弄清楚如何使用 Rspec 自动化这些测试。我正在努力成为一个好孩子并使用测试驱动设计,但这让我很难过。
问题是我无法弄清楚如何在我的测试中访问新创建的 League 和 User 实例的属性。我正在尝试使用以下代码这样做:
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
但测试返回nil
值为:league_id
我对一般编程和特别是 Rspec 都是新手,所以我非常感谢有人可能提供的任何帮助!