2013-11-28 9 views
32

Wenn ich einen Test mit stub_chain starte, erhalte ich eine Verwarnungswarnung.Wie vermeidet man die Verwarnungswarnung für stub_chain in RSpec 3.0?

describe "stubbing a chain of methods" do 
    subject { Object.new } 

    context "given symbols representing methods" do 
    it "returns the correct value" do 
     subject.stub_chain(:one, :two, :three).and_return(:four) 
     expect(subject.one.two.three).to eq(:four) 
    end 
    end 
end 

Deprecation Warnungen: Mit stub_chain von rspec-Mocks' alten :should Syntax, ohne explizit die Syntax ermöglicht ist veraltet. Verwenden Sie die neue :expect Syntax oder aktivieren Sie stattdessen explizit :should.

Wie kann diese Warnung vermieden werden?

Antwort

31
RSpec.configure do |config| 
    config.mock_with :rspec do |c| 
    c.syntax = [:should, :expect] 
    end 
end 

Beachten Sie, dass es die rspec-mocks-Syntax und nicht die rspec-expectations-Syntax festlegt, wie Pauls Antwort zeigt.

+0

+1 Danke für die Klarstellung. Total vermisst. –

+0

Siehe [in Bezug auf ca. 2015/2016 Weise]] (http://stackoverflow.com/questions/28050261/issue-with-stubs-and-rspec-old-syntax). –

64

Um die Warnung mit Ihrem Code, um loszuwerden, wie sie ist, werden Sie explizit die should Syntax in der config aktivieren müssen:

RSpec.configure do |config| 
    config.expect_with :rspec do |c| 
    c.syntax = [:should, :expect] 
    end 
end 

Der Ersatz Syntax für stub_chain ist:

allow(object).to receive_message_chain(:one, :two, :three).and_return(:four) 
expect(object.one.two.three).to eq(:four) 

Weitere Informationen zu diesem und seinem Verwendung in:

Zum Zeitpunkt des Schreibens, die Änderung receive_message_chain wird in der 3.0.0.beta2 Freisetzung von rspec-Mocks aufgenommen werden (siehe Changelog). Wenn Sie es jetzt wollen, werden Sie auf der bleeding edge leben müssen, und fügen Sie die spezifische Referenz in Ihrer Gemfile verpflichten receive_message_chain Funktion zu erhalten:

gem 'rspec-mocks', github: 'rspec/rspec-mocks', ref: '4662eb0' 

Leider, der nicht wirklich Ihre Frage beantworten über das Abschaffen der Abschreibungsnachricht, die ich nicht ausführen konnte, sogar mit der Vorabversion von rspec-mocks und
c.syntax = [:should, :expect] explizit in meiner RSpec-Konfiguration festgelegt.

Also, ich würde Ihre Optionen sagt entweder warten, bis 3.0.0.beta2 freigegeben wird und sehen, ob die deprecation Hinweise zu dieser Zeit mit Ihrem vorhandenen Code repariert oder in den neuesten Änderungen bringen und Ihre Syntax receive_message_chain ändern .

Siehe Myron's answer für die tatsächliche Lösung.

+2

Haben Sie versucht, dies mit 'stub_chain'? Auch wenn ': sollte' explizit aktiviert ist, bleibt die Warnung bei der Version auf github mit 'v3.0.0.beta1', von der ich annehme, dass sie die letzte ist. –

+0

Guter Fang. Es funktioniert nicht mit 'v3.0.0.beta1', ich bearbeite meine Antwort. –

0

Für alle, die ein altes Projekt auf die neue Syntax aktualisieren möchten, gibt es ein Tool here.

Wie in der Relish blog erwähnt, werden sie wahrscheinlich die Soll-Syntax in ein externes Juwel in der Zukunft verschieben, das führt mich zu der Annahme, dass es schließlich obsolet werden wird.

3

Hier ist eine Lösung, die für mich gearbeitet - ich bin mit Rails 4.1.7:

Innen spec/spec_helpber.rb, rspec-Erwartungen und/oder rspec-Mocks' Syntax wie folgt festgelegt:

RSpec.configure do |config| 
    config.mock_with :rspec do |mocks| 
    mocks.syntax = [:should, :expect] 
    end 
    config.expect_with :rspec do |expectations| 
    expectations.syntax = [:should, :expect] 
    end 
end 

Hoffnung hilft dies jemand anderes :)

Verwandte Themen