【发布时间】:2014-07-17 10:12:42
【问题描述】:
我正在使用 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.com 和 vtqCXuHCfITEUJB@example.com)。
我发现伪随机生成器是按顺序工作的,这样,当用相同的数字重新播种随机性时,它会再次执行相同的顺序。我不禁想知道 RSpec 是否会在测试之间重新植入 Ruby 的随机性。 (也许值得注意的是,重用电子邮件地址的测试经常发生在不同的 RSpec 测试文件中;也许 RSpec 在文件之间重新播种?)
有什么想法吗?
【问题讨论】:
-
你的代码可以简化为
def random_email; alphabet = [*'a'..'z', *'A'..'Z']; alphabet.sample(15).join << "@example.com" end