如何在Rails之外使用带有RSpec的mock_models?

时间:2012-04-11 23:38:08

标签: ruby activerecord rspec

我目前正在开发一个包含Redis DB,EventMachine和Sinatra(用于轻量级API)的Ruby项目。我们正在使用RSpec进行测试,到目前为止,一切都很顺利。

但是,现在我们需要开始(最低限度地)与MySQL数据库进行对话。我们决定走ActiveRecord的路线(只是因为它 SO 很好!)到目前为止一切顺利。但是,我们的测试遇到了一个小问题。我在RSpec上使用mock_modelmock在线找到了一些资源,但我一直在寻找:

undefined method `mock_model'
undefined method `mock'

错误。在没有安装整个Rails框架的情况下,我需要使用哪些宝石才能工作(看起来有点矫枉过正)。

我应该使用哪些其他模拟/存根方法/宝石来模拟我的AR模型?我非常喜欢语法的灵活性:

@user = double(NS::UserAccount)
@car = double(NS::Car)
NS::UserAccount.stub(:find).with(@valid_user_id).return(@user)
NS::Car.stub(:find).with(@valid_car_id).return(@car)



更新

My Gemfile如下所示:

group :test do
  gem 'rspec',                '~> 2.8.0'
  gem 'rspec-expectations',   '~> 2.8.0'
  gem 'rspec-mocks',          '~> 2.8.0'      
  gem 'autotest-standalone'
  gem 'em-spec',              '~> 0.2.6'
  gem 'rack-test',            '~> 0.6.1'
  gem 'factory_girl',         '~> 3.1.0'
end

此外,在spec_helper.rb文件的顶部,我有以下内容:

require 'bundler/setup'
Bundler.require(:test, :development)

1 个答案:

答案 0 :(得分:0)

对于Active Record模型,RSpec有方法mock_model,它自动创建几个存根,对所有Ruby on Rails模型都是通用的,并且接受散列。

因此,要在Rails之外使用mock_model,您应该已连接Active Record和rspec-rails扩展名。

确保您可以查看定义mock_model的{​​{3}}。