0

実際に使用すると多くのものをレンダリングするページがありますが、カピバラでは何もレンダリングしません。

コントローラーは次のようになります。

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:clonerake db:test:preparenada -- は空のままです。

理由を理解するのを手伝ってもらえますか? テストデータベースをのぞいて、何かあるかどうかを確認する方法はありますか?

編集:コメントに触発されて、問題はテスト環境が毎回物事をフラッシュすることであるに違いないことに気づきました。明らかに何もありません。これを解決するための(明らかに誤った)試みで、私は次のことを行いました:

  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 に答える