2014-11-03 1 views
1

Double received unexpected message 고장/오류가보고 스텁에도 불구하고 예상치 못한 메시지를 받았습니다 spec/my_klass_spec.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 

그리고 코드 lib/my_klass.rb :

,691 363,210
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

많은 감사를 스텁 때, 예기치 않은 메시지로보고 왜 closed? 이해할 수 없다!

+0

짐의 대답을 보셨습니까? 클래스 메서드에 double을 사용할 수 있다고는 생각하지 않습니다 - http://stackoverflow.com/a/15252724/3109182 – Anthony

+0

어떤 버전의 rspec과 ruby를 사용하고 있습니까? – Surya

+0

레일 4.1.6 및 Rspec 2.14.1. –

답변

0

:

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에서 다음과 같은 작동합니다 : as_stubbed_const과 결합하여, 당신은 클래스의 원래 구현을 대체 할 수

before(:each) do 
    MyKlass.class_variable_set :@@klass_var, nil 
end 

아마 누군가가 더 나은 해결책을 찾을 수 있지만이 방법은 저에게 효과적입니다.

1

RSpec 3에서는 class_double을 사용하여 클래스의 이중을 만들 수 있습니다. 각 테스트는 문제를 해결 명시하기 전에 클래스 변수를 설정

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 
+0

아니, 작동하지 않습니다. 다음과 같은'NameError'가보고됩니다 :''에 대해'undefined 지역 변수 또는 메소드 'objekt'. –

+0

죄송합니다 다시 확인하십시오 –

+0

아니, 죄송합니다, 아직 변경 사항이 없습니다. 이전과 같은 에러 메시지를 받는다 :'Double "OtherKlass"가 예상치 못한 메시지를 받았다. with (no args)'. –

관련 문제