运行 在 Rspec 中的特定测试后块之后
Run after block after specific test in Rspec
有什么方法可以 运行 after/before 阻止 after/before 使用标签的特定测试?
我有 3 个 it
块
describe "describe" do
it "test1" do
end
it "test2" do
end
after(<<what goes here??>>) do
end
end
我如何 运行 仅在 test2 之后的 after 块?这可能吗?
是的,你可以做到,看看here
您可以在 rspec
中使用 metadata
来实现
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
end
describe "Skip hook demo" do
# If prior to RSpec 2.99.0.beta1
after do
puts "before hook" unless example.metadata[:skip]
end
# If RSpec 2.99.0.beta1 or later
after do |example|
puts "before hook" unless example.metadata[:skip]
end
it "will use before hook" do
end
it "will not use before hook", :skip do
end
end
您应该使用 context
s 来执行此操作。类似于:
describe "describe" do
context 'logged in' do
before(:each) do
# thing that happens in logged in context
end
after(:each) do
# thing that happens in logged in context
end
it "test1" do
end
end
context 'not logged in' do
# No before/after hooks here. Just beautiful test isolation
it "test2" do
end
end
end
在 before/after 块中有 if/else 个条件是一种代码味道。不要那样做。它只会使您的测试变得脆弱、容易出错且难以更改。
最好的方法就是使用 context
。例如:
describe "AutomateFr33k's fr33ky tests" do
it "runs test1" do
expect(true).to be_true
end
context "do something afterwards" do
after { puts "running something after test2!" }
it "runs test2" do
expect(5).not_to eq(4)
end
end
end
有什么方法可以 运行 after/before 阻止 after/before 使用标签的特定测试?
我有 3 个 it
块
describe "describe" do
it "test1" do
end
it "test2" do
end
after(<<what goes here??>>) do
end
end
我如何 运行 仅在 test2 之后的 after 块?这可能吗?
是的,你可以做到,看看here
您可以在 rspec
中使用metadata
来实现
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
end
describe "Skip hook demo" do
# If prior to RSpec 2.99.0.beta1
after do
puts "before hook" unless example.metadata[:skip]
end
# If RSpec 2.99.0.beta1 or later
after do |example|
puts "before hook" unless example.metadata[:skip]
end
it "will use before hook" do
end
it "will not use before hook", :skip do
end
end
您应该使用 context
s 来执行此操作。类似于:
describe "describe" do
context 'logged in' do
before(:each) do
# thing that happens in logged in context
end
after(:each) do
# thing that happens in logged in context
end
it "test1" do
end
end
context 'not logged in' do
# No before/after hooks here. Just beautiful test isolation
it "test2" do
end
end
end
在 before/after 块中有 if/else 个条件是一种代码味道。不要那样做。它只会使您的测试变得脆弱、容易出错且难以更改。
最好的方法就是使用 context
。例如:
describe "AutomateFr33k's fr33ky tests" do
it "runs test1" do
expect(true).to be_true
end
context "do something afterwards" do
after { puts "running something after test2!" }
it "runs test2" do
expect(5).not_to eq(4)
end
end
end