在使用之前(:all),使用Capybara的Rails的Rspec测试失败

时间:2013-02-07 07:13:34

标签: ruby-on-rails ruby rspec capybara

您好我是 Rails 的新手,现在尝试制作一个简单的推文应用

我写了一个简单的测试并尝试使用before(:all),因为我想要每次都访问页面,但是测试没有保留访问页面对象。

当我使用before(:each)测试成功时,当然,当it增加到大量时,我认为测试时间也会增加。

如何使用before(:all)编写此测试?谢谢你的好意。

# /spec/requests/tweet_pages.spec
require 'spec_helper'

describe "TweetPages" do
  describe "GET /tweet_pages" do

    before(:each) {visit tweets_path} # this line pass test but...
    #before(:all) {visit tweets_path} # next line fails in second it test. 

    subject {page}
    context do
      its(:status_code) {should == 200}
      it {should have_selector 'input'}
    end
  end
end

2 个答案:

答案 0 :(得分:1)

如果我之前没有弄错(:all)运行给定描述或上下文块中的所有示例。在这种情况下,您的示例位于其自己的上下文块中。如果要删除上下文块,测试应该通过。否则,您可以将before(:all)块添加到您希望before(:all)有权访问的describe或context块中。

N.B。还建议添加一个after(:all)块以避免在(:all)之前给您带来麻烦。通常,不建议使用before(:all)。

答案 1 :(得分:1)

  • before(:each)为每个it语句运行一次。
  • before(:all)为其所在的每个contextdescribe块运行一次。

尝试在您的案例中强制before(:all)会适得其反,但一种方法是将结果存储在@@class_variable中,然后在您的主题中重复使用。