簡體   English   中英

如何使用 Rspec 在 Ruby 中運行除一個示例之外的所有示例

[英]How to run all examples except one in Ruby using Rspec

config.before(:example,) do
    visit '/'
   find('a[class=btn').click
   fill_in 'username', with: $email
   fill_in 'password', with: $password
   find('input[class=btn]').click
end

我想在除一個測試之外的所有測試中登錄該網站,我該怎么做?

我試過這個:

config.before(:example,) |test| do
    visit '/'
   find('a[class=btn').click
   fill_in 'username', with: $email
   fill_in 'password', with: $password
   find('input[class=btn]').click 
   unless test.metadata[:notrun]
   end
end

我期待所有測試運行,除了帶有標簽的測試:notrun,但它仍然運行

你的unless塊只是

除非 test.metadata[:notrun] 結束

所以它什么也沒做。 如果您希望之前的代碼不運行,那么您可以將其全部包裝在unless

config.before(:example) |test| do
  unless test.metadata[:notrun]
    visit '/'
    find('a[class=btn').click
    fill_in 'username', with: $email
    fill_in 'password', with: $password
    find('input[class=btn]').click 
  end
end

但這只會阻止 before 鈎子對標記的測試做任何事情,它實際上不會阻止測試運行。 防止運行特定示例的最簡單方法就是用skip標記它(而不是你的notrun

it 'blah blah', skip: true do
  ....
end

如果我理解正確的話,除了一個測試之外,OP 希望在每次測試之前登錄。 使用skip: true實際上會跳過測試,而不是before塊。

有一種方法可以將before塊配置為僅在使用元數據的某些測試上執行。 它是這樣工作的:

RSpec.configure do |config|
  config.before(:each, login: true) do
    visit '/'
    find('a[class=btn').click
    fill_in 'username', with: $email
    fill_in 'password', with: $password
    find('input[class=btn]').click 
  end
end

RSpec.describe 'MyController' do
  describe '#index' do 
    it 'does something while logged out'

    context 'logged in', login: true do
      it 'does something while logged in'
      it 'does something else while logged in'
    end
  end
end

您可以將元數據放在任何describecontextexample / it塊上。 因此,如果您有一個包含應登錄的測試的文件,您只需將元數據放在文件頂部最外層的describe中。

暫無
暫無

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

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