我不确定如何在 rspec 中准确地进行此类测试,或者是否可能。
我的具体场景是关于电子邮件确认:
1) user#save
方法使用 SecureRandom
生成一串字节(电子邮件确认码),对其进行 Bcrypt,并将结果存储在数据库中。原始随机代码(未散列)也会通过电子邮件发送给用户。
2) 我的 user#confirm_email
方法接收电子邮件确认码并使用 BCrypt 对其进行哈希处理,并将其与数据库中的现有哈希值进行比较。'
一切正常,但我不清楚如何测试该场景,因为 #confirm_email
的输入是随机的,在 #save
中创建,并且不存储在任何地方我的测试可以访问。
除了方法返回值之外,我的代码是否有一种干净的方法将信息传递给我的测试?我考虑过将代码存储在临时文件中,然后从测试中读取该文件,但我很好奇是否有更好的方法。
最佳答案
模拟会用测试中的某些内容替换代码中的方法。这正是您要求做的。
使用rspec mocking framework例如,您可以在测试中编写:
allow(SecureRandom).to receive(:random_bytes).and_return("My Test String")
然后对您的 #confirm_email
代码使用相同的输入字符串。假设您没有进行集成测试。
为了仅测试 #confirm_email
方法,您可以首先使用已知的字节字符串在数据库中创建记录来创建加密数据。
关于ruby-on-rails - 从我的应用程序代码中获取数据并进入我的 rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28267438/