【发布时间】:2012-12-31 00:11:18
【问题描述】:
我有一个页面,当我真正使用它时,它会呈现很多东西,但在 Capybara 中什么都不会呈现。
控制器是这样的:
class IdeasController < ApplicationController
def index
@ideas = Idea.all
end
页面的相关位是这样的:
<div class="accordion" id="accordion">
Ideas length is <%= @ideas.length %>.
<% @ideas.each do |idea| %>
<div class="accordion-group">
<div class="accordion-heading">
<%= link_to(idea.title, '#idea_' + idea.id.to_s, class: "accordion-toggle", data: {toggle: "collapse", parent: "#accordion"} ) %>
</div>
<%= div_for(idea, class: "accordion-body collapse") do %>
<div class="accordion-inner">
<%= render :partial => "idea", locals: { :idea => idea } %>
</div>
<% end %>
</div>
<% end %>
</div>
在“开发”中查看时,效果很好,并且我在视图中得到了很多东西(我的数据库中充满了模拟数据)。但是当我在测试中使用save_and_open_page 打开它时,它完全是空的,并显示“想法长度为 0”。
我做了 rake db:test:clone 和 rake db:test:prepare,但 nada -- 保持空白。
你能帮我找出原因吗?有没有办法窥视测试数据库并查看是否有任何东西?
编辑: 受到 cmets 的启发,我意识到问题一定是测试环境每次都会刷新东西,所以显然什么都没有。在(显然是被误导的)尝试解决这个问题时,我做了:
before do
create(:idea)
visit root_path
click_link "Log In"
end
注意create(:idea) 行,它应该会触发我的创意工厂并将模拟创意粘贴到数据库中(该工厂可以与其他测试一起正常工作)。
现在页面显示:
内部服务器错误
SQLite3::BusyException: 数据库被锁定: INSERT INTO "users" ("created_at", "email", "name", "provider", "uid", "updated_at") VALUES (?, ?, ?, ?, ?, ?)
这太奇怪了。 Rails s 正在后台运行。
根据评论者的要求,完整的规格如下:
require 'spec_helper'
describe "Idea page", js: true do
subject { page }
before do
create(:idea)
visit root_path
click_link "Log In"
end
context "Single idea" do
before do
save_and_open_page
#click_link('Eligendi sint quod quia alias sed sit vitae repellendus.')
end
it { should have_selector('a',text:'Claim') }
end
end
【问题讨论】:
-
您是否在访问页面之前创建了 Idea 对象?在您的测试中,您只需执行
p Idea.all或p Idea.count即可将该信息输出到您的控制台。如果您正在使用该 gem,您也可以使用 Pry。您可以运行rails c test进入Rails 控制台以进行测试环境。 -
你使用
database_cleanergem吗? -
在你的规范中做:
puts Idea.all看看你是否有任何想法。此外,如果您将规范代码添加到此问题中,这将有所帮助。 -
@MrDanA:我使用 Pry,感谢您的提示。
p Idea.count确实是空的。我不介意尝试在测试中创建这个想法(尽管我宁愿它是一个夹具),但这也不起作用。 -
@dimuch:我愿意。好提示。我现在正在尝试在规范中创建一个想法,但它不起作用。
标签: ruby-on-rails rspec capybara bdd