ruby-on-rails - 从我的应用程序代码中获取数据并进入我的 rspec 测试

标签 ruby-on-rails ruby testing rspec automated-tests

我不确定如何在 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/

相关文章:

ruby-on-rails - 在 Rails 的单个 View 中为模型创建多个记录

java - Junit 在 Eclipse 中通过,在 Jenkins 中失败

mysql - 用一个表中的引用 ID 替换另一个表中的字段

ruby-on-rails - 使用 role_model 和 Factory_Girl(用于规范测试),如何正确地将用户设置为管理员?

ruby-on-rails - Rails - 一个 View 中的多个模型

ruby - Nokogiri 识别页面上最大文本的策略?

ruby - 如何将对象的字段转储到控制台?

testing - 使用 System-Verilog 进行串行测试台架和断言

ruby-on-rails - 为 Spree 应用编写测试套件

ruby-on-rails - 如何对三元运算符使用多重赋值?