这个问题的变体已经被问过很多次了,但大多数都是关于摩卡的,我没有使用它。我是rails的新手,所以这可能看起来微不足道,但我不能在我的规范文件中使用mock(用于名为competitions的控制器)。
require 'rails_helper'
require 'spec_helper'
describe CompetitionsController do
before :each do
@fake_c = mock(Competition, :competition_id => 1, :competition_name => 'one', :competition_des => 'any')
end
describe 'create' do
it 'should create new competition' do
#CompetitionsController.stub(:create).and_return(mock('Competition'))
#post :create, {:id=>"1"}
end
end
end
我只停留在模拟方法上,所以我没有写太多其他的东西。我的spec_helper文件有以下内容
ENV["RAILS_ENV"] ||= 'test'
require 'simplecov'
SimpleCov.start
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
RSpec.configure do |config|
# rspec-expectations config goes here. You can use an alternate
# assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer.
config.expect_with :rspec do |expectations|
# This option will default to `true` in RSpec 4. It makes the `description`
# and `failure_message` of custom matchers include text for helper methods
# defined using `chain`, e.g.:
# be_bigger_than(2).and_smaller_than(4).description
# # => "be bigger than 2 and smaller than 4"
# ...rather than:
# # => "be bigger than 2"
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
# rspec-mocks config goes here. You can use an alternate test double
# library (such as bogus or mocha) by changing the `mock_with` option here.
config.mock_with :rspec do |mocks|
# Prevents you from mocking or stubbing a method that does not exist on
# a real object. This is generally recommended, and will default to
# `true` in RSpec 4.
mocks.verify_partial_doubles = true
end
end
我使用ruby 2.2.1版本和rails 4.2.1
使用double代替mock,应该可以解决您的问题:
before :each do
@fake_c = double('Competition', :competition_id => 1, :competition_name => 'one', :competition_des => 'any')
end