通常在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
然而,很明显,这种嵌套很快就会失控,尤其是在测试网站上的复杂行为时。此外,最外层嵌套中的“before”块比内部before
块运行的次数多,不必要地减慢了测试套件的速度。
那么,是否有更优雅的方法可以解决这个问题?我可以使用shared_examples_for
,it_behaves_like
,{{1}来轻松清理内容但是,当我想要做的就是在程序上运行测试而不需要每个测试都需要单独运行时,它似乎相当尴尬。换句话说,我正在寻找这样的测试DSL:
shared_context
是的,我知道原则上测试是孤立运行的,但是说实话,当测试中的每个步骤都依赖于先前测试的结果时,这样做并不总是切实可行的。
答案 0 :(得分:1)
按需求分组时,规格工作得很好。它会干掉每个条件的设置/拆卸,并在您知道案例的时候轻松扫描,但不知道功能是什么。
例如:
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
我不认为嵌套规范适用于描述实现(例如,首先执行此操作,然后执行此操作)。这似乎很快就爆发了