我正在使用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>
始终始终为零。没有任何意义。
答案 0 :(得分:2)
看起来你没有在测试中调用visit
,因此页面总是空白的。您需要在保存屏幕截图之前致电visit root_path # (or whatever path that heading is on)
。
答案 1 :(得分:1)
let!
阻止之前调用 it
块。由于您在let!
块中查看了该页面,但在listing
块中创建了it
,因此只有在您查看该页面后才会创建该列表。