2013-11-28 20 views
32

Khi tôi chạy thử nghiệm với stub_chain, tôi sẽ nhận được cảnh báo không dùng nữa.Làm thế nào để tránh cảnh báo không dùng nữa cho stub_chain trong 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 Cảnh báo: Sử dụng stub_chain từ cũ cú pháp :should rspec-mocks' không cho phép một cách rõ ràng cú pháp bị phản đối. Sử dụng cú pháp mới :expect hoặc bật rõ ràng :should thay thế.

Cảnh báo này có thể tránh được như thế nào?

Trả lời

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

Lưu ý rằng nó đặt cú pháp rspec-mocks, không phải cú pháp kỳ vọng rspec, như câu trả lời của Paul hiển thị.

+0

+1 Cảm ơn bạn đã làm rõ. Hoàn toàn bỏ lỡ điều đó. –

+0

Xem [liên quan đến cách làm việc năm 2015/2016] (http://stackoverflow.com/questions/28050261/issue-with-stubs-and-rspec-old-syntax). –

64

Để thoát khỏi cảnh báo với mã của bạn như nó vốn có, bạn sẽ phải kích hoạt một cách rõ ràng cú pháp should trong cấu hình của bạn:

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

Cú pháp thay thế cho stub_chain là:

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

Thông tin thêm về điều này và sử dụng trong:

Theo văn bản này, sự thay đổi để receive_message_chain sẽ được bao gồm trong bản phát hành 3.0.0.beta2 của rspec-mocks (xem Changelog). Nếu bạn muốn nó ngay bây giờ , bạn sẽ phải sống trên bờ chảy máu và thêm cụ thể cam kết tham chiếu trong Gemfile của bạn để có được receive_message_chain làm việc:

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

Thật không may, điều đó không thực sự trả lời câu hỏi của bạn về việc loại bỏ thông báo khấu hao mà tôi không thể thực hiện được, ngay cả với phiên bản tiền phát hành của rspec-mocks và
c.syntax = [:should, :expect] đặt rõ ràng trong cấu hình RSpec của tôi.

Vì vậy, tôi sẽ nói lựa chọn của bạn hoặc là đợi cho đến khi 3.0.0.beta2 được phát hành và xem thông báo deprecation được cố định với mã hiện tại của bạn tại thời điểm đó, hoặc mang lại những thay đổi mới nhất và thay đổi cú pháp của bạn để receive_message_chain .

Xem Myron's answer để biết giải pháp thực tế.

+2

Bạn đã thử điều này bằng 'stub_chain' chưa? Ngay cả với ': should' được bật một cách rõ ràng, cảnh báo vẫn còn với phiên bản trên github được gắn thẻ' v3.0.0.beta1', mà tôi đoán là mới nhất. –

+0

Bắt tốt. Nó không hoạt động với 'v3.0.0.beta1', tôi sẽ chỉnh sửa câu trả lời của mình. –

0

Đối với bất kỳ ai muốn nâng cấp dự án cũ lên cú pháp mới, có một công cụ here.

Như đã đề cập trong Relish blog, có thể họ sẽ chuyển cú pháp thành đá quý bên ngoài trong tương lai, điều này khiến tôi tin rằng nó cuối cùng sẽ bị lỗi thời.

3

Dưới đây là một giải pháp mà làm việc cho tôi - Tôi đang sử dụng Rails 4.1.7:

Bên trong đặc tả/spec_helpber.rb, thiết lập cú pháp rspec-vọng và/hoặc rspec-mocks' như sau:

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 

Hy vọng điều này sẽ giúp người khác :)

Các vấn đề liên quan