我正在构建一个Rails应用程序,它将MySQL用于某些模型,将MongoDB用于其他模型(通过mongo_mapper gem)。
我们已经开始为应用程序构建黄瓜(使用水豚和网络驱动程序)测试,并且遇到了一些不存在的ID被引用的麻烦。我相信我已将其跟踪到MongoDB中的旧数据。
此时,database_cleaner正在使用MySQL记录,而不是MongoDB记录。
关于使用MongoDB有一个discussion at the cucumber-rails project,但我相信它假设您只使用MongoDB,而不是MongoDB和MySQL。
有没有办法让database_cleaner同时清理MySQL和MongoDB?或者它只是一个或另一个?
我发现this article关于如何在运行测试之前删除所有MongoDB内容,但我相信这会删除所有数据,包括我用于本地开发的记录......
感谢。
答案 0 :(得分:1)
假设当你告诉有关Mongo DB要跟踪的轨道时你正在做这样的事情:
MongoDatabase = "mongodb://localhost/yourdb_#{Rails.env}"
然后在你的测试中,做:
/spec/spec_helper.rb
MongoMapper.database.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)
(上面是MongoMapper,但Mongoid的想法是一样的 - 只需降低到数据库级别并删除所有集合。)
这只会丢弃测试数据库中的数据,而不是dev db。与DB清洁剂配合使用,你很高兴。