Ruby on rails Double收到意外消息,尽管存在存根
Ruby on rails Double收到意外消息,尽管存在存根,ruby-on-rails,ruby,rspec,rspec-rails,Ruby On Rails,Ruby,Rspec,Rspec Rails,Double接收到意外消息尝试运行以下规范时报告失败/错误: MyKlass does something does something again (FAILED - 1) Failures: 1) MyKlass does something again Failure/Error: MyKlass.do_something Double "OtherKlass" received unexpected message :closed? with (n
Double接收到意外消息
尝试运行以下规范时报告失败/错误:
MyKlass
does something
does something again (FAILED - 1)
Failures:
1) MyKlass does something again
Failure/Error: MyKlass.do_something
Double "OtherKlass" received unexpected message :closed? with (no args)
# ./lib/my_klass.rb:5:in `do_something'
# ./spec/my_klass_spec.rb:17:in `block (2 levels) in <top (required)>'
Finished in 2.05 seconds
2 examples, 1 failure
Failed examples:
rspec ./spec/my_klass_spec.rb:16 # MyKlass does something again
和codelib/my_klass.rb
:
1 require "spec_helper"
2
3 class OtherKlass; end
4
5 describe MyKlass do
6 let(:objekt) { double("OtherKlass", closed?: "NOT REALLY") }
7
8 before :each do
9 OtherKlass.stub(:get_objekt).and_return(objekt)
10 end
11
12 it "does something" do
13 MyKlass.do_something
14 end
15
16 it "does something again" do
17 MyKlass.do_something
18 MyKlass.do_something
19 end
20 end
1 class MyKlass
2 @@klass_var = nil
3
4 def self.do_something
5 if @@klass_var.blank? || @@klass_var.closed?
6 @@klass_var ||= OtherKlass.get_objekt
7 end
8 end
9 end
我无法理解为什么已关闭?
在我的规范文件的第6行被存根时被报告为意外消息
非常感谢您的帮助 在RSpec 3中,您可以使用
class\u double
,它允许您创建类的double。结合as_stubbed_const
,您可以替换类的原始实现:
RSpec.describe MyKlass do
let(:objekt) do
double(OtherKlass, closed?: 'NOT REALLY')
end
before do
class_double(OtherKlass, get_objekt: objekt).as_stubbed_const
end
it 'does something' do
MyKlass.do_something
end
end
在Rspec 2中,以下各项应起作用:
RSpec.describe MyKlass do
let(:objekt) do
double('OtherKlass', closed?: 'NOT REALLY')
end
before do
fake_klass = Class.new
fake_klass.stub(:get_objekt) { objekt }
stub_const('OtherKlass', fake_klass)
end
it 'does something' do
MyKlass.do_something
end
end
在每次测试之前显式设置类变量可以解决问题:
before(:each) do
MyKlass.class_variable_set :@@klass_var, nil
end
也许有人能找到更好的解决办法,但这个办法对我有效。你看过吉姆的答案了吗?我认为你不能使用双对类方法——你使用的是哪个版本的rspec和ruby?Rails 4.1.6和rspec 2.14.1。不,它不起作用。报告了以下
NameError
:未定义的局部变量或#
的方法“objekt”。抱歉,请再次检查,抱歉,仍然没有更改。获取与以前相同的错误消息:Double“OtherKlass”收到意外消息:已关闭?使用(无参数)
。以下是帮助我的方法。在每次测试之前显式设置类变量可以解决问题:在(:each){MyKlass.class\u variable\u set:@@klass\u var,nil}
之前。