Ruby/RSpec 随机化似乎不是那么随机

标签 ruby rspec

我正在使用 RSpec 来测试我的网站。我有一种生成随机电子邮件地址供用户注册的方法:

def random_email
  alphabet = [('a'..'z'),('A'..'Z')].map{|i| i.to_a}.flatten
  (0...15).map{ alphabet[rand(alphabet.length)] }.join << "@example.com"
end

此方法在整个测试套件中被多次调用。很多时候,它最终会生成 A) 多个相同的电子邮件地址(实际示例:tqCXuHCfITEUJBh@example.com),或 B) 在以前使用的电子邮件地址的开头添加一些新字符电子邮件地址,并在末尾砍掉一些(实际示例:tqCXuHCfITEUJBh@example.comvtqCXuHCfITEUJB@example.com)。

我发现伪随机生成器按顺序工作,这样当用相同的数字重新播种随机性时,它会再次执行相同的顺序。我不禁想知道 RSpec 是否在测试之间重新播种 Ruby 的随机性。 (也许值得注意的是,重用电子邮件地址的测试经常出现在不同的 RSpec 测试文件中;也许 RSpec 正在文件之间重新播种?)

有什么想法吗?

最佳答案

即使 RSpec 没有重新播种 RNG,其他东西也可能会破坏您的规范。通过将规范的行为与某些更大的系统状态联系起来,您正在使规范变得脆弱。

通常唯一的电子邮件地址只是按顺序生成的,或者使用类似 FactoryGirl 的东西或者只是在辅助方法中。如果您用完了这些,祝贺您自己编写了历史上最大的测试套件。

关于Ruby/RSpec 随机化似乎不是那么随机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790483/

相关文章:

rspec - 使用 session sinatra 进行 Rspec 测试

ruby - 如何在 Sequel Postgresql 迁移中定义 ARRAY 列?

ruby-on-rails - 从嵌套类中调用 Ruby 模块方法

ruby-on-rails - 在 Heroku/Ruby on Rails 上找不到 PNG

ruby - 使用 RSpec 测试输出到命令行

ruby-on-rails - 将 cucumber 翻译成 rspec

ruby-on-rails - Rails - 当我推送到生产环境时我会丢失我的开发数据库吗?

ruby-on-rails - Rails 4 Heroku 部署错误 : Precompiling assets failed - cannot import/find boostrap file

ruby-on-rails - 移除 VCR 盒不会导致 RSpec 失败

ruby-on-rails - rspec LoadError(Ruby on Rails,Michael Hartl 的教程)