[英]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
您可以將元數據放在任何describe
、 context
或example
/ it
塊上。 因此,如果您有一個包含應登錄的測試的文件,您只需將元數據放在文件頂部最外層的describe
中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.