簡體   English   中英

rspec中未運行“ before:each do”塊

[英]“before :each do” block not being run in rspec

在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”中聲明的變量不能在塊中被識別?

因為您將它們聲明為each塊的局部變量,所以它們會立即超出范圍。 您需要將它們聲明為實例變量,以使其可用於其他方法:

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

米加爾是對的。 但這也是使用let!的黃金地段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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM