有没有办法用 rspec 有条件地对测试进行分组?我的意思是,有没有一种方法可以说“如果这个变量是某个值,则运行这组测试。如果这个变量是某个其他变量,则运行另一组测试”?
需要它的地方的基本示例(显然,实际上不起作用,但应该向您展示我想要的)。假设待测用户定义在别处,当前被测用户为@user。尽管您可能有更好的替代方案,但这很好。
before do
login_as_user(@user) #This logs them in and brings them to the homepage to be tested
page.visit("/homepage")
end
describe "Check the user homepage"
subject {page}
it {should have_content("Welcome, #{@user.name}!")}
if(@user.role=="admin")
it {should have_link("List Users"}
end
end
请记住,我无法控制正在测试的用户 - 例如,我无法即时创建用户,并且不能保证给定用户存在,而且我不知道给定用户的角色组合是什么会有。因此,我确实需要某种方式来说明“仅当满足这些条件时才运行此测试”,而不是一种创建可以运行每个测试的情况的方式。
最佳答案
您可以使用 let
(或者可能是 let!
)来定义登录的用户应该是谁。 (显然将 @regular_user
和 @admin_user
替换为适当的工厂/夹具/等)
before do
login_as_user(user)
page.visit "/homepage"
end
let(:user) { @regular_user }
describe "Check the user homepage" do
subject { page }
it { should have_content "Welcome, #{@user.name}!" }
context "when an administrator" do
let(:user) { @admin_user }
it { should have_link "List Users" }
end
end
关于ruby - Rspec 中的条件测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7770885/