我对Capybara和测试工具都不是很熟练。我正在构建一个多步骤表单或表单向导。
这就是我脑海中出现的情景:
这是我到目前为止所做的事情(我设法让事情变得有效):
describe "signup" do
before { visit signup_path }
let(:submit) { 'Start creating my account' }
let(:next_btn) { 'Next' }
describe "with invalid information" do
it "should not create a user" do
expect { click_button submit }.not_to change(User, :count)
end
describe "should not move to the next step" do
before { click_button submit }
it { should have_content('error') }
it { should have_title('Start here') }
end
end
describe "with valid information wizard step 1" do
before do
fill_in 'First name', with: "Example"
fill_in 'Last name', with: "User"
fill_in 'email', with: "user@example.com"
find("#user_password").set "foobar"
end
it "should move to the next wizard step 2" do
click_button submit
should have_content('We need some more info')
end
it "should have error on the wizard step 2" do
fill_in 'Date of birth', with: "Example"
click_button next_btn
should have_content('error')
end
end
end
这个断言失败了should have error on the wizard step 2
,它似乎仍然停留在第1步,我知道这是通过查看页面内容和错误导致Dob element can't be found
和next button
无法找到的
这是否可以通过水豚按顺序测试,逐步保存信息?
答案 0 :(得分:4)
在进行后续步骤时,您应该能够通过嵌套describe块来完成这项工作,例如。
describe "signup" do
...
describe "with valid information wizard step 1" do
before do
fill_in 'First name', with: "Example"
fill_in 'Last name', with: "User"
fill_in 'email', with: "user@example.com"
find("#user_password").set "foobar"
click_button submit
end
it "should move to the next wizard step 2" do
should have_content('We need some more info')
end
describe "and filling out the date of birth incorrectly" do
before do
fill_in 'Date of birth', with: "Example"
click_button next_btn
end
it "should have error on the wizard step 2" do
should have_content('error')
end
end
end
end
现在,嵌套块中会重复按钮单击,因此第一个示例单击“提交”,第二个示例单击“提交”,然后单击“next_btn”等。请记住,重复序列为< em>每个示例因此这可能会减慢您的测试速度。 OTOH它更准确地反映了用户的互动,因此权衡可能是值得的。
答案 1 :(得分:1)
我认为这不是一个水豚问题,而是一个rspec问题。我使用的黄瓜比rspec更多,但据我所知,在我有限的经验中,每个“描述”都是一个独立的测试用例。我不认为你可以。期望这些以任何特定顺序执行或b。在测试之间共享上下文/状态。
同样,我的经验主要是黄瓜,但我之前已经为这个EXACT场景编写了测试 - 两页用户注册向导。在黄瓜中,人们编写“场景”,这些场景基本上都是用“给定”,“何时”和“然后”(或者更糟糕的是,假设,动作和断言)来描述用户与系统交互的短篇小说。 )这些是用简单的英文写的。然后,编写将这些英语句子映射到Ruby代码(可能使用capybara)的Ruby代码来执行/测试每个场景描述的内容......我所做的是构建了几个不同的场景。
您显然可以将这些故事翻译成rspec。
在这些场景中重现的是两种形式的填写(无论是好的还是坏的数据)。要保持代码DRY,请创建一些辅助方法,使您可以使用可帮助您满足每个方案的值轻松填充表单。
这对你有帮助吗?