我目前正在开发一个包含Redis DB,EventMachine和Sinatra(用于轻量级API)的Ruby项目。我们正在使用RSpec进行测试,到目前为止,一切都很顺利。
但是,现在我们需要开始(最低限度地)与MySQL数据库进行对话。我们决定走ActiveRecord的路线(只是因为它 SO 很好!)到目前为止一切顺利。但是,我们的测试遇到了一个小问题。我在RSpec上使用mock_model
和mock
在线找到了一些资源,但我一直在寻找:
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)
答案 0 :(得分:0)
对于Active Record模型,RSpec有方法mock_model
,它自动创建几个存根,对所有Ruby on Rails模型都是通用的,并且接受散列。
因此,要在Rails之外使用mock_model
,您应该已连接Active Record和rspec-rails扩展名。
确保您可以查看定义mock_model
的{{3}}。