gpt4 book ai didi

ruby-on-rails - 在 RSpec/Cucumber 中进行功能测试时如何避免臃肿、嵌套很深的 block ?

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:43 25 4
gpt4 key购买 nike

通常在 RSpec/Cucumber 中进行功能测试时,我想模拟一系列相关的程序用户操作。例如,用户可能会登录,然后更新个人资料,然后在站点上执行一些其他操作,然后注销,等等...

在 RSpec 中,类似的功能测试可能看起来像这样:

describe "Step 1: Sign in" do
before do
# Capybara logic
end

describe "Step 2: Visit settings page" do
before do
end

describe "Step 3: Update profile" do
before do
# More Capybara/etc...
end

describe "Step 4: Making a new post" do
before do
# ......
end

describe "Step 5: Viewing inbox" do
before do
# ...
# More nested code etc, etc, etc...
end
end


end
end
end
end

但是,显然这种嵌套很快就会失去控制,尤其是在测试网站上的复杂行为时。此外,最外层嵌套中的“之前” block 比内部 before block 运行更多次,从而不必要地减慢测试套件。

那么,是否有更优雅的方法来处理这个问题?我可以使用 shared_examples_forit_behaves_likeshared_contextbefore(:all)、辅助方法等。但是当我只想按程序运行测试而不需要每个测试都运行时,这似乎很尴尬隔离运行。换句话说,我正在寻找这样的测试 DSL:

# Step 1:
test "Sign in" do
visit "/sign_in"
fill_in "whatever"

# ...
end

# Step 2:
test "Update profile", after: "Sign in" do
# Runs after "Sign in" sharing same context so variables and object states aren't reset
end

是的,我知道原则上测试是独立运行的,但公平地说,当测试中的每个步骤都可能依赖于先前测试的结果时,这样做并不总是可行的。

最佳答案

按要求分组时,规范非常有效。它会针对每种情况进行设置/拆卸,并在您知道情况是什么但不知道功能是什么时使它们易于扫描。

例如:

describe "a logged in user" do
before do
# log in
end

describe "with 3 items" do
before do
# add 3 items
end

it "displays 3 items in the cart" do
end
end

describe "with 0 items" do
it "displays an empty cart" do
end
end
end

我认为嵌套规范不能很好地描述实现(例如,先做这个,再做那个)。这似乎很快就爆发了

关于ruby-on-rails - 在 RSpec/Cucumber 中进行功能测试时如何避免臃肿、嵌套很深的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27163321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com