2

我一直在阅读 Michael Hartl 的教程http://railstutorial.org/并且在大多数情况下它对开始使用 Rails 有很大帮助。这本书非常关注 TDD,这很棒,因为我想学习 TDD,但问题是我 90% 的测试都失败了,并出现错误“电子邮件已被接收”。我认为正在发生的事情是,当测试运行时,它会按照书中的建议创建一个带有电子邮件“user@example.com”的用户。问题是当需要创建用户的第二个测试运行时,它使用相同的“user@example.com”电子邮件地址。我知道有一些解决方法,我见过使用工厂女孩创建一系列电子邮件地址,但我不应该这样做以使教程中的示例正常工作。

有没有其他人遇到过这个问题?从缺乏关于这个特定主题的问题来看,我认为这是我的代码中的一个错误,但也许其他人遇到了这个问题。

4

5 回答 5

2

嗬!问题是注释行:

config.use_transactional_fixtures = true

在 spec_helper.rb 中!

新手误区。

于 2011-02-01T13:05:45.547 回答
1

为您的测试清理数据库的有用资产:

https://github.com/bmabey/database_cleaner

于 2011-01-24T17:42:17.037 回答
0

您应该在每次测试后搜索如何清理数据库的主题。问题也可能是由您从固定装置加载的默认用户引起的,然后当您再次在测试中创建 hin 时,但如果您说 90%,这似乎是第一种情况。我不附加链接,因为当您使用 rspec、test::unit 或 cucumber 时,它会有所不同,它们中的每一个都有其优点。

快乐编码!

于 2011-01-24T13:30:50.367 回答
0

我最近也遇到了这个问题。测试数据库应该在测试后被清理,但由于某种原因它不是。我所做的只是运行“rake db:reset”来重置所有内容,然后确保我使用的是工厂(工厂女孩)。只需尝试使用固定装置或工厂,这样您就可以确定您实际上并没有访问数据库。

于 2011-01-24T14:57:09.967 回答
0

我在第 11 章快结束时看到了类似的行为。我的 spec_helper.rb 是正确的。这为我修复了它:

重新启动“rails s”
重新启动自动测试
rake db:reset
rake db:migrate
rake db:test:prepare
rake db:populate

HTH,佩里

于 2011-03-15T18:50:52.133 回答