Ruby on rails Factory Girl Rails 4关联在控制台中工作,但不是通过Cucumber

Ruby on rails Factory Girl Rails 4关联在控制台中工作,但不是通过Cucumber,ruby-on-rails,ruby-on-rails-4,cucumber,factory-bot,Ruby On Rails,Ruby On Rails 4,Cucumber,Factory Bot,我有一个Rails 4应用程序,有一系列的关联:帖子有很多评论,评论有一个假设。我已建立工厂,根据假设生成审查: FactoryGirl.define do factory :review do association :post, factory: :post ...fields... factory :review_with_assumption do after(:create) do |review| FactoryGirl.cr

我有一个Rails 4应用程序,有一系列的关联:帖子有很多评论,评论有一个假设。我已建立工厂,根据假设生成审查:

FactoryGirl.define do
  factory :review do
    association :post, factory: :post
    ...fields...

    factory :review_with_assumption do
      after(:create) do |review|
        FactoryGirl.create(:assumption, assumable: review)
      end
    end
  end
end
在控制台中,以下各项工作正常:

post = FactoryGirl.create(:post)
rev = FactoryGirl.create(:review_with_assumption, post: post)
rev.assumption.valid?
 => true
post.reviews.first.assumption.valid?
 => true
所有字段都与我的工厂定义中设置的字段完全相同——例如,每个假设的“分数”为6。但是,当我使用以下步骤时,会创建审查,但其假设不是:

Given(/^the post "(.*?)"'s review "(.*?)" has an assumption$/) do |arg1, arg2|
  post = FactoryGirl.create(:post, name: arg1)
  rev = FactoryGirl.create(:review_with_assumption, name: arg2, post: post)
end
Then(/^I should see the "(.*?)" review assumption's score$/) do |arg2|
  rev = Review.find_by_name(arg2)
  page.should have_content rev.assumption.score
end
所以我得到一个错误,看起来像:

And I should see the "Test Rev" review assumption's score
      undefined method `score' for nil:NilClass (NoMethodError)
如果我手动输入所有内容,它试图呈现的页面内容在浏览器中可以完美工作。为什么《工厂女孩》和《黄瓜》都不起作用?

您没有名为“arg1”的“回顾”记录。相反,根据您的定义,名为“arg1”的是
post
记录。

我很抱歉,这些变量名令人困惑,已经更正。它实际上是用于创建审阅记录的“arg2”名称。@thusson,这很好:)但是,args仍然存在问题。如果这是您的确切代码,您在第二个块中使用了
arg1
,作为
Review=Review。按名称查找(arg1)
然后
是另一个上下文,arg1不在这里,所以您不能使用它,当然rev是nil。修复方法是将
arg1
定义为一个实例变量
@arg1
,以便您稍后可以在该测试的其他块中访问它是的,您是对的--再次更正,更多的抱歉:)但问题是测试发现审查很好,但它没有与之相关的假设。谢谢你的帮助,很抱歉这么麻烦。