【问题标题】:"before :each do" block not being run in rspec"before :each do" 块不在 rspec 中运行
【发布时间】:2013-06-05 04:30:09
【问题描述】:

在 rspec 测试中,我尝试在运行测试之前初始化两个变量,如下所示

  describe "Publishing" do
    before :each do
      page_published = Page.create(attributes_for(:page))
      page_unpublished = Page.create(attributes_for(:page_unpublished))
    end
    it "returns published pages" do
      expect(Page.published).to eq [page_published]
    end
    it "returns unpublished pages" do 
      expect(Page.unpublished).to eq [page_unpublished]
    end
  end

当我这样做时,我得到一个错误:

1) Page Publishing returns unpublished pages
     Failure/Error: expect(Page.unpublished).to eq [page_unpublished]
     NameError:
       undefined local variable or method `page_unpublished' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_4:0x0000010355b8c0>

但是,如果我在每个 it 块中定义变量,则没有错误。例如:

  describe "Publishing" do
    it "returns published pages" do
      page_published = Page.create(attributes_for(:page))
      expect(Page.published).to eq [page_published]
    end
    it "returns unpublished pages" do 
      page_unpublished = Page.create(attributes_for(:page_unpublished))
      expect(Page.unpublished).to eq [page_unpublished]
    end
  end

为什么在“before :each do”块中声明的变量在它的块中没有被识别?

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    因为您将它们声明为 each 块的本地变量,这会立即超出范围。您需要将它们声明为实例变量以使它们可用于其他方法:

    before :each do
      @page_published = Page.create(attributes_for(:page))
      @page_unpublished = Page.create(attributes_for(:page_unpublished))
    end
    

    【讨论】:

      【解决方案2】:

      meagar 是对的。但这也是使用 let! 块的主要场所,因此:

        describe "Publishing" do
      
          let! :page_published { Page.create(attributes_for(:page)) }
          let! :page_unpublished { Page.create(attributes_for(:page_unpublished)) }
      
          it "returns published pages" do
            expect(Page.published).to eq [page_published]
          end
          it "returns unpublished pages" do 
            expect(Page.unpublished).to eq [page_unpublished]
          end
        end
      

      【讨论】:

        猜你喜欢
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-19
        相关资源
        最近更新 更多