3

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

然而,现在我们需要开始(最少)与 MySQL 数据库对话。我们决定走 ActiveRecord 的路线(只是因为它太棒了!),到目前为止一切都很顺利。但是,我们的测试遇到了一个小问题。我在网上找到了一些使用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)



更新

我的 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)
4

1 回答 1

0

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

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

为了确保您可以查看此处mock_model定义的位置。

于 2012-04-16T12:27:52.230 回答