您好我是 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
答案 0 :(得分:1)
如果我之前没有弄错(:all)运行给定描述或上下文块中的所有示例。在这种情况下,您的示例位于其自己的上下文块中。如果要删除上下文块,测试应该通过。否则,您可以将before(:all)块添加到您希望before(:all)有权访问的describe或context块中。
N.B。还建议添加一个after(:all)块以避免在(:all)之前给您带来麻烦。通常,不建议使用before(:all)。
答案 1 :(得分:1)
before(:each)
为每个it
语句运行一次。before(:all)
为其所在的每个context
或describe
块运行一次。尝试在您的案例中强制before(:all)
会适得其反,但一种方法是将结果存储在@@class_variable
中,然后在您的主题中重复使用。