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

Getting data out of my app code and into my rspec test

我不确定在 rspec 中如何进行这种测试,或者是否可能。

我的具体情况是关于电子邮件确认:

1)user#save方法使用SecureRandom生成一串字节(邮件确认码),Bcrypt,并将结果存入数据库。原始随机代码(未散列)也通过电子邮件发送给用户。

2) 我的 user#confirm_email 方法接收电子邮件确认码并使用 BCrypt 对其进行哈希处理,并将其与数据库中现有的哈希值进行比较。'

一切正常,但我不清楚如何测试场景,因为 #confirm_email 的输入是随机的,在 #save 中创建,并且没有存储在我的测试可以访问的任何地方。

在方法 return 值之外,我的代码是否有一种干净的方法可以将信息传递给我的测试?我考虑过将代码存储在临时文件中,然后从测试中读取文件,但我很好奇是否有更好的方法。

Mocking 将代码中的方法替换为测试中的方法。这正是您要执行的操作。

rspec mocking framework 为例,您可以在测试中编写:

allow(SecureRandom).to receive(:random_bytes).and_return("My Test String")

然后对您的 #confirm_email 代码使用相同的输入字符串。假设您没有进行集成测试。

为了仅测试 #confirm_email 方法,您可以先使用已知字节串在数据库中创建记录以创建加密数据。