1

您好,我是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
4

2 回答 2

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

在你的情况下试图强制before(:all)会适得其反,但一种方法是将结果存储在 a 中@@class_variable,然后在你的主题中重用它。

于 2013-02-07T09:41:28.280 回答
1

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

NB 还建议添加一个 after(:all) 块来避免之前(:all) 给你带来的麻烦。一般来说,不建议使用 before(:all) 。

于 2013-02-07T07:57:48.393 回答