ruby - Rspec 中的条件测试?

标签 ruby testing rspec

有没有办法用 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/

相关文章:

ruby-on-rails - 如何在 FactoryBot 中设置不是外键的 _id 值?

ruby-on-rails - Capybara Rspec 测试失败可能对 AJAX 造成影响 - 测试 contenteditables

ruby - 通过 RStakeout 运行 RSpec 时如何启用颜色?

ruby-on-rails - 如何增加 rails 中 HTTParty post 方法的超时时间?

testing - 如何在干净的操作系统上测试软件安装?

c# - 编码 Ui :How to go about for search property of window when its title name keeps changing?

RSpec 和设计 : cannot sign_in admin

ruby-on-rails - Rails 在 rename_column 之后查找并替换属性的实例

ruby-on-rails - 从 Rails 控制台修改数据库 ID?

testing - 测试用例管理工具2017