规范导致Ruby崩溃

时间:2012-07-31 19:19:16

标签: ruby-on-rails ruby rspec crash specifications

所以我正在测试我的一个Rails模型,但系统的Ruby一直在崩溃?这与之前的Growl一起发生过,但从未出现过系统的红宝石。我已经重新开始了,它仍在发生。我正在使用Ruby-1.9.3-p194ruby-1.9.3-p0也会发生同样的崩溃。我的规范似乎无害,我不知道为什么会发生这种情况。

规范:

对缩进感到抱歉。

<小时/>     需要'spec_helper'

describe "Admin pages" do
  subject { page}

  describe "when not signed in" do
    before { visit admin_path }
    it { should have_selector('title', text: 'Sign in') }
end

describe "when signed in as an admin" do
before do 
  sign_in 
  visit admin_path
end

describe "Admin navigation menu" do
  it { should have_css('.nav-header', text: 'Content') }
  it { should have_link('Dashboard',  href: admin_path) }
  it { should have_link('News',       href: admin_posts_path) }
  it { should have_link('Events',     href: admin_events_path) }
  it { should have_link('Photos',     href: admin_photos_path) }
  it { should have_css('.nav-header', text: 'Your Account') }
  it { should have_link('Settings',   href: admin_settings_path) }
  it { should have_link('Help',       href: admin_help_path) }

  describe "should be on every admin page" do
    after { should have_admin_navigation }
    it { visit admin_path }
    it { visit admin_posts_path }
    it { visit admin_photos_path }
    it { visit admin_settings_path }
  end


  describe "should not be on any other pages" do
    before { visit root_path }
    it { should_not have_css('#admin-navigation') }
  end

end

describe "Dashboard (index) page" do
  before { visit admin_path }
  it { should have_selector('h3', text: 'Dashboard') }
  it { should have_selector('title', text: full_title('Admin Dashboard')) }
end

describe "Posts page" do
  before { visit admin_posts_path }
  it { should have_selector('h3', text: 'Posts') }
  it { should have_selector('table') }
  it { should have_selector('th', text: 'Title') }
  it { should have_selector('th', text: 'Content') }
  it { should have_selector('th', text: 'Published On') }
end

describe "Events page" do
  before { visit admin_events_path }
  it { should have_selector('h3', text: 'Events') }
  it { should have_selector('input') }
end

end
end

<小时/> The System Crash Report作为保留格式的要点。

编辑:我通过评论缩小了范围,错误与@second_page的工厂有关。

1 个答案:

答案 0 :(得分:1)

我有一个调试工具可以帮助解决这个问题。它使用ruby的跟踪来记录所有方法调用。最后一个应该是在崩溃之前执行的最后一次调用。也许尝试运行它来查看崩溃前的最后一个方法调用,看看它是否一致?这个实现会使应用程序放慢很多,仅供参考,但是在紧要关头可以给你很好的信息。

https://github.com/ericbeland/debugtools/blob/master/tracing.rb

一旦你知道方法调用,你就可以知道谁/什么是负责人。

-------编辑说明-----------

下载链接文件(或将其粘贴到空白文件中)。在您的应用中,需要该文件。然后在application.rb中执行以下操作:

 include Tracing

 class Object
  include Tracing
 end

在代码中找到尽可能晚的位置 - 在此之前您从未见过它崩溃的最后一点。因此,基于您的新编辑,就在该测试的开头。此时,粘贴此声明:

 tracing_on('/tmp/tracelog.txt')

这将开始记录。让事情一直持续到发生崩溃。此时,请查看/tmp/tracelog.txt以查看它死亡的位置。