実際に使用すると多くのものをレンダリングするページがありますが、カピバラでは何もレンダリングしません。
コントローラーは次のようになります。
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 -- は空のままです。
理由を理解するのを手伝ってもらえますか? テストデータベースをのぞいて、何かあるかどうかを確認する方法はありますか?
編集:コメントに触発されて、問題はテスト環境が毎回物事をフラッシュすることであるに違いないことに気づきました。明らかに何もありません。これを解決するための(明らかに誤った)試みで、私は次のことを行いました:
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