0

我有一个页面,当我真正使用它时,它会呈现很多东西,但在 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:cloneand rake db:test:prepare,但是 nada - 保持空白。

你能帮我弄清楚为什么吗?有没有办法窥视测试数据库并查看是否有任何东西?

编辑:受评论的启发,我意识到问题一定是测试环境每次都会刷新东西,所以显然什么都没有。在(显然是被误导的)尝试解决这个问题时,我做了:

  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
4

1 回答 1

1

使用工厂创建数据是正确的方法。要修复 sqlite 错误,您可能需要增加数据库的超时时间。

为此,在config/database.yml

找到test:环境并设置

timeout:

为更大的值。正如问题SQLite3::BusyException所建议的那样

之后,确保spec/spec_helper.rb您具有以下行:

  config.use_transactional_fixtures = false

并且您正在使用诸如 database_cleaner 之类的东西来保持您的测试数据库在测试之间保持清洁。

于 2013-01-16T17:15:11.130 回答