【问题标题】:RSpec referencing child record in request specRSpec 在请求规范中引用子记录
【发布时间】:2012-04-27 01:08:07
【问题描述】:

我是 RSpec 的新手,我一直遇到的问题是了解哪些记录在/超出范围。请参阅下面的示例。我正在通过 FactoryGirl 创建一系列记录。例如,我创建了一个用户,然后在 before 块中我使用该用户登录。这似乎总是很好。但是每当我开始尝试使用以前创建的记录的子记录时,我似乎遇到了麻烦。例如与组。组需要一个用户和一个 group_type。每当我尝试对这些记录做某事时,我都会遇到“Called id for nil”错误。我试过“puts group.name”,我可以看到该组正在创建,但由于某种原因,一旦“visit group_path(group)”行执行记录不再存在。我知道我在这里遗漏了一些非常基本的东西。感谢任何帮助,因为这让我发疯了。

describe "activities page" do
  let(:user) { FactoryGirl.create(:user) }
  let!(:group_type) { FactoryGirl.create(:group_type) }
  let!(:group) { FactoryGirl.create(:group, user: user, group_type: group_type) }

 before do      
   sign_in user
   visit group_path(group)
   click_button "Check In"
 end

错误:

1) Activity pages activities page 
 Failure/Error: visit group_path(group)
 RuntimeError:
   Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

添加群展方式:

def show
  @group = Group.find(params[:id])
  @members = @group.members.paginate(page: params[:page])
  cookies[:group_id] = @group.id

  # Set Pusher chat
  @chat = Chat.find_by_group_id(@group.id)
  @user = current_user
  @messages = Message.find(:all, :conditions => ["chat_id = ?", @chat.id.to_s])
end

【问题讨论】:

  • GroupsController 中的show 方法是什么样的?
  • 添加在上面。感谢您的观看。
  • @chat 为零吗?您的测试似乎没有创建任何与其创建的群组关联的聊天。
  • 你用的是capybara还是别的?如果您使用的是 capybara,则 sign_in 用户将不起作用,因为它在单独的浏览器进程中运行,您需要实际访问新的会话页面并登录。
  • 关联的ChatGroupMember 是作为组@98​​7654328@ 方法的一部分创建的。我假设如果该创建调用出现问题,当我尝试“puts group.name”之类的操作时会出现错误?我正在使用 capybara 并且在许多测试中一直在做 sign_in uservisit some_path 之类的事情。这里的一个区别是我通常会执行visit some_path(user) 之类的操作,这里我将group 传递给路径。

标签: ruby-on-rails testing rspec rspec-rails


【解决方案1】:

我相信这里的问题是您使用的是let!。 它们之间的区别在于非爆炸版本是懒惰的。只有在需要变量时才会对其进行评估。
bang 版本在每个示例之前被调用。 这里的问题是非惰性示例的顺序。我真的不认为你可以保证他们运行的顺序。在您的情况下,我相信 let!(:group) 在 let!(group_type) 运行之前运行会导致此失败。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2012-03-28
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多