如何在Ruby的Rspec中运行除某一个用例外的所有测试用例
问题:如何让Capybara全局登录操作仅排除特定测试?
我原本在所有测试执行前都会跑登录逻辑:
config.before(:example,) do visit '/' find('a[class=btn').click fill_in 'username', with: $email fill_in 'password', with: $password find('input[class=btn]').click end
现在希望只排除某一个测试不执行登录,尝试了下面的代码,但带:notrun标签的测试还是会执行登录:
config.before(:example,) |test| do visit '/' find('a[class=btn').click fill_in 'username', with: $email fill_in 'password', with: $password find('input[class=btn]').click unless test.metadata[:notrun] end end
解决方法
你的代码逻辑完全写反了——登录操作被放在了unless块外面,不管test.metadata[:notrun]是否为真,都会先执行登录代码,unless内部是空的根本起不到排除作用。
正确写法一:用unless包裹登录逻辑
把登录代码放在unless块内部,只有当测试没有:notrun标签时才执行:
config.before(:example) do |test| unless test.metadata[:notrun] visit '/' find('a[class=btn]').click # 修正原代码中缺少的闭合方括号`]` fill_in 'username', with: $email fill_in 'password', with: $password find('input[class=btn]').click end end
正确写法二:用next提前跳过
这种写法更直观,当检测到:notrun标签时直接跳过登录逻辑:
config.before(:example) do |test| next if test.metadata[:notrun] visit '/' find('a[class=btn]').click fill_in 'username', with: $email fill_in 'password', with: $password find('input[class=btn]').click end
给测试添加排除标签
最后给需要跳过登录的测试加上:notrun标签即可:
it "无需登录的测试用例", notrun: true do # 测试逻辑代码 end
另外注意:原代码中find('a[class=btn')缺少闭合方括号],属于语法错误,会导致元素查找失败,上述代码已一并修正。
内容的提问来源于stack exchange,提问作者Lucas Benicio
相关产品推荐
相关产品推荐

