如何使用Mongoid和ActiveRecord在应用程序中运行RSpec和Cucumber测试?

时间:2016-12-30 15:25:50

标签: ruby-on-rails ruby activerecord rspec mongoid

我的团队项目是使用Mongoid 4的Rails 4.2应用程序。我们添加的新功能要求我们从Postgres数据库中读取数据,并通过中间对象在应用程序中使用这些记录。换句话说,我们的应用程序将使用包含来自Mongoid模型和ActiveRecord模型的混合数据的ActiveModel对象(非持久化),因此可以使用控制器和视图等执行所有正常的酷Rails内容(我们认为& #39;聪明。)现在的意图是我们永远不会写入SQL表,只是阅读。存储的任何新数据都将在mongodb中。

对于我的开发环境,第一步看起来非常简单:

  • 我将pg添加到gemfile
  • 我将require "active_record/railtie"添加到了application.rb
  • 我以正常的ActiveRecord方式创建了我的新模型(虽然因为我正在使用现有的数据库,所以我将类名更改为更有意义的内容并相应地设置了表名)。
  • 我添加了一个database.yml文件(我们并不需要带有mongoid的文件)以及所有正确的postgres信息
  • 我使用rake db:schema:dump创建了schema.rb文件。花了一段时间才弄清楚我需要它,但我到了那里。

使用rails控制台,我能够向自己证明我可以在两个数据库中搜索/查找对象。到目前为止一切都很好。

当我第一次启动rspec测试时,有大量与验证错误相关的失败,因为"记录已存在该名称"。很长的调查故事,我通过将所有DatabaseCleaner调用设置为DatabaseCleaner[:mongoid]来修复,并且再次传递了rspec。 (我仍然不知道幕后发生了什么。)

但是,黄瓜(功能)测试?我甚至无法让他们开始。它一直在说:

Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=test

没有!我们所有的迁移都是针对MONGO的。没有SQL / ActiveRecord迁移。毫不奇怪,耙子失败了:

rake aborted! ArgumentError: wrong number of arguments (2 for 0).

我尝试了这一系列命令:

rake db:drop RAILS_ENV=test
rake db:create RAILS_ENV=test
rake db:schema:load RAILS_ENV=test

但是黄瓜仍会提供相同的迁移待定错误。

所以我被卡住了!我还没有找到任何人做我们正在尝试做的事情。我知道有成为某人,显然我找不到合适的搜索字词。

所有这一切中最糟糕的部分是我根本不打算使用ActiveRecord测试数据库,我只是想在我的测试中模拟这些记录。我怎么能告诉应用程序,"我只需要ActiveRecord用于运行时,而不是测试。停止查看迁移,ActiveRecord,那些不适合你!"

我用完了想法和单词来搜索。我已经尝试解决这个问题几天了,尝试了很多不同的事情,请原谅我,如果我把这些问题留在这里。非常感谢任何帮助。

0 个答案:

没有答案