【问题标题】:Rspec test, about the order and before(:all)Rspec 测试,关于 order 和 before(:all)
【发布时间】:2011-10-25 09:36:59
【问题描述】:

如果我有 rspec 测试如下:

context "main context" do

  before(:all) do
     # code for before :all
     puts "my fore :all"
  end 
  describe "Scenario-1" do
     context "my context 1" do
        it "should blablabla" do

     end
        it "should blablabla" do

     end
      end
      context "my context 2" do
        it "should blablabla" do

    end
        it "should blablabla" do

     end
      end
    end # end of describe "Scenario-1"

    describe "Scenario-2"
       context "my context 3" do
         it "should blablabla" do

     end
         it "should blablabla" do

     end
       end
    end #end of "Scenario-2"

end #end of main context

要问的两个问题:

1. 是不是before(:all) 声明实际上在每个子上下文 中被调用?我以为它在整个测试过程中只被调用一次,但是当我运行测试时,我所经历的是 before(:all) 在每个中执行的代码 @987654324 @,这就是每个 context 开始时运行的,为什么?

(您注意到我的before(:all) 代码中有“puts”,并且我在运行测试时看到每个子上下文中都有这个放置,为什么?不是before(:all)应该在整个测试过程中只执行一次??)

2.当我运行我的测试时,为什么测试运行的顺序是从底部上下文到向上上下文(而在每个上下文中,“it “是上下)?那么如何在上下文级别更改测试顺序?

【问题讨论】:

    标签: ruby-on-rails rspec rspec2


    【解决方案1】:

    1) before(:all) 应该只运行一次......但是有一个已知问题是它完全按照您指出的那样做。在这里讨论: http://rubyforge.org/pipermail/rspec-users/2010-September/018

    2) 测试必须彼此独立运行。以确保您没有做出任何假设。因此,测试套件通常以随机或相反的顺序运行测试 - 以确保您没有这样做。

    【讨论】:

    • 嗨,我想我已经清楚地描述了我的经历,但无论如何,我更新了描述。 before(:all) 中的代码在每个上下文启动时执行。那是我的问题。请检查我的更新。
    • 是的,你清楚地描述了它在每个子上下文中被调用......但是具体发生在你身上的是什么?你能给我一个例子,说明你在每个子上下文中调用的 before(:all) 中实际放入的内容吗?只是如果我有一个真实的例子而不是抽象的描述,那么解决问题会更容易。
    • 嗨, before(:all) 里面的代码是 Object.create(...),它只是在数据库中创建一些对象。没什么特别的。
    • 我问是因为当我完全使用您的示例并在 before(:all) 中添加“puts 'I'm in all now'”时...它只在开始时运行一次。因此,这可能与您在 before(:all) 中放入的 what 有关。
    • 那么...你怎么知道它运行了不止一次(即在每个上下文中)结果是什么?
    【解决方案2】:

    首先,阅读this——尤其是页面底部的部分

    其次,我最近学到的一个技巧是你可以使用after(:all)

    after :all do
      @users.each { |user| user.destroy! }
    end
    

    很漂亮

    【讨论】:

    • ps,你需要使用before(:each)而不是before(:all)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多