0

我正在尝试使用 RSpec 测试控制器,但由于控制器中的功能需要数据库而遇到问题。

控制器中的代码行如下所示:

@myallresources = Myrsources.all

其中 Myresources 只是继承自 ActiveRecord::Base

但是,因为没有数据库,所以没有要加载的内容,而且 @myallresources 只是一个空数组,导致测试失败。有没有办法在运行 rspec 时连接到数据库?

我对 RSpec 和 rails 非常陌生,因此非常感谢任何帮助。谢谢。

4

1 回答 1

0

您不应该在控制器规范中使用数据库连接。

检查此页面上有关数据库隔离的部分http://rspec.info/rails/writing/controllers.html

基本上你必须模拟或存根你的 ActiveRecord 模型,因为它们应该在模型规范中单独测试。这是一个使用 mock_model 的简单示例:

before do
  mocks = (1..3).map { mock_model(MyResource) }
  MyResource.should_receive(:all).and_return(mocks)
end

将它放在同一个块中,其中驻留describe定义测试使用的操作MyResource.all

您可以在以下链接中找到对模拟和存根的很好解释:

于 2011-08-24T18:42:11.557 回答