我正在尝试使用 RSpec 测试控制器,但由于控制器中的功能需要数据库而遇到问题。
控制器中的代码行如下所示:
@myallresources = Myrsources.all
其中 Myresources 只是继承自 ActiveRecord::Base
但是,因为没有数据库,所以没有要加载的内容,而且 @myallresources 只是一个空数组,导致测试失败。有没有办法在运行 rspec 时连接到数据库?
我对 RSpec 和 rails 非常陌生,因此非常感谢任何帮助。谢谢。
我正在尝试使用 RSpec 测试控制器,但由于控制器中的功能需要数据库而遇到问题。
控制器中的代码行如下所示:
@myallresources = Myrsources.all
其中 Myresources 只是继承自 ActiveRecord::Base
但是,因为没有数据库,所以没有要加载的内容,而且 @myallresources 只是一个空数组,导致测试失败。有没有办法在运行 rspec 时连接到数据库?
我对 RSpec 和 rails 非常陌生,因此非常感谢任何帮助。谢谢。
您不应该在控制器规范中使用数据库连接。
检查此页面上有关数据库隔离的部分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。
您可以在以下链接中找到对模拟和存根的很好解释: