为什么FactoryGirl创建的对象在测试中可见,但在正在测试的视图中不可见?

时间:2014-01-02 18:11:28

标签: ruby-on-rails-3 rspec factory-bot

我正在使用RSpec,FactoryGirl和PhantomJS。


更新:

我已经确认,如果我在spec/support/login_macros.rb login_user方法中创建此项目,我在下面调用该方法,则视图中会显示列表对象。

这似乎是FactoryGirl问题。为什么我可以在辅助方法中从工厂创建,但不能在测试本身内部?这是支持方法:

module LoginMacros
  def login_user(admin = false)

    myrepo = FactoryGirl.create(:repository, :myname)
    plan = FactoryGirl.create(:plan, name: "Test Multi", listing_limit: 5000, repositories_allowed: 5)

    user = FactoryGirl.create(:user)

    subscription = FactoryGirl.create(:subscription, user: user, plan: plan)
    user.add_repository(myrepo)
    listing = FactoryGirl.create(:listing, user: user, repository: myrepo)

    visit login_path
    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => user.password
    click_button 'Go'
    user
  end

我已在transactional_fixtures中将spec_helper.rb设为false。这是我的规范:

require "spec_helper"

describe "App Integration" do

  let!(:user) { login_user }
  let!(:myrepo) { user.repositories.where(name: "myrepo" ).first }

  it "lets a user add apps to a listing", js: true do
    listing = FactoryGirl.create(:listing, user: user, repository: myrepo)
    puts listing.inspect
    Capybara::Screenshot.screenshot_and_open_image
  end

end

现在问题就在于此。看到上面的puts行?它打印出对象。

但是在屏幕截图中,好像该对象 从未创建 。像魔术一样!

然而,用户和存储库对象 在视图中都可见

此外,我可以转到其他视图,看到 列表 对象。只是不在我的申请的主页上!

为什么该对象在一个视图中可见而不在另一个视图中?我只是在主页面上这样做:

<h3><%= Listing.count %></h3>

始终始终为零。没有任何意义。

2 个答案:

答案 0 :(得分:2)

看起来你没有在测试中调用visit,因此页面总是空白的。您需要在保存屏幕截图之前致电visit root_path # (or whatever path that heading is on)

答案 1 :(得分:1)

let!阻止之前调用

it块。由于您在let!块中查看了该页面,但在listing块中创建了it,因此只有在您查看该页面后才会创建该列表。