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

时间:2015-02-01 20:23:48

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

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

我的具体方案是关于电子邮件确认:

1)user#save方法使用SecureRandom生成字符串(电子邮件确认代码),对其进行Bcrypts,并将结果存储在数据库中。原始随机代码(未散列)也通过电子邮件发送给用户。

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

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

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

1 个答案:

答案 0 :(得分:3)

Mocking用您测试中的某些内容替换代码中的方法。这正是你要求做的。

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

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

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

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