从我的应用程序代码中获取数据并进入我的 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
方法,您可以先使用已知字节串在数据库中创建记录以创建加密数据。
我不确定在 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
方法,您可以先使用已知字节串在数据库中创建记录以创建加密数据。