Ruby on rails 使用Rspec/Rails模拟只读数据库

Ruby on rails 使用Rspec/Rails模拟只读数据库,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,rspec,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,Rspec,我目前正在用Rspec运行我的RoR应用程序的单元测试。 当我的一个控制器无法向数据库写入新实体时,它应该返回HTTP状态500。 我希望测试这种行为,并希望暂时将我的数据库标记为只读 有人知道这是否可行吗 我尝试了“”中提到的技术,但这种方法对我不起作用(因为控制器在写入数据库之前先读取数据库)。如果您正在测试控制器,我认为您可以模拟相应的模型请求。 那么,Model.create抛出什么异常呢?试着这样做: Model.stub(:create).and_raise(ActiveRecord

我目前正在用Rspec运行我的RoR应用程序的单元测试。 当我的一个控制器无法向数据库写入新实体时,它应该返回HTTP状态500。 我希望测试这种行为,并希望暂时将我的数据库标记为只读

有人知道这是否可行吗


我尝试了“”中提到的技术,但这种方法对我不起作用(因为控制器在写入数据库之前先读取数据库)。

如果您正在测试控制器,我认为您可以模拟相应的模型请求。 那么,
Model.create
抛出什么异常呢?试着这样做:

Model.stub(:create).and_raise(ActiveRecord::ReadOnlyRecord)

我想当我使用
Model.create
方法时,这应该会起作用,但我使用的是
Model.new
instance.save组合使用。我不太确定在这种情况下我将如何使用存根。也许,存根
保存
?我想,如果你想进行单元测试,那么就使用存根。如果你想进行功能测试,那就操纵数据库吧。我试过存根
save
,但似乎不起作用。我又看了一遍我的代码,结果证明我可以直接使用create,而不是使用前面提到的两种方法。我已经实现了这一点,并使用了您的示例。看起来很好用。谢谢!:)