嵌套的RSpec测试

时间:2014-01-03 18:35:12

标签: ruby testing rspec nested

我正在关注Michael Hartl的教程并遇到了以下代码,我无法理解。

  describe "index" do
    let(:user) { FactoryGirl.create(:user) }
    before(:each) do
      sign_in user
      visit users_path
    end

    it { should have_title('All users') }
    it { should have_content('All users') }

    describe "pagination" do

      before(:all) { 30.times { FactoryGirl.create(:user) } }
      after(:all)  { User.delete_all }

      it { should have_selector('div.pagination') }

      it "should list each user" do
        User.paginate(page: 1).each do |user|
          expect(page).to have_selector('li', text: user.name)
        end
      end
    end
  end

我的问题是: 这是一个嵌套测试,其中Pagination的测试块在Index Test块中运行吗?换句话说,测试流程的顺序:

  1. 之前(:每个)用户签名外部块和访问用户路径执行
  2. 然后执行30.times {FactoryGirl.create(:user)的内部块
  3. 然后执行它的内部块{should have_selector('div.pagination')}
  4. 然后执行expect(page).to have_selector('li',text:user.name)的内部块
  5. 谢谢

1 个答案:

答案 0 :(得分:1)

以下是上述测试的流程:

before(:each)块在以下各项之前执行:

it { should have_title('All users') }
it { should have_content('All users') }

然后,再次执行before(:each),然后执行describe block,执行:

before(:all) { 30.times { FactoryGirl.create(:user) } }

it { should have_selector('div.pagination') }

it "should list each user" do
  User.paginate(page: 1).each do |user|
    expect(page).to have_selector('li', text: user.name)
  end
end

最后,after(:all) { User.delete_all }被执行。

我希望这有助于解释流程。