rspec 3 - khai một phương thức lớp


94

Tôi đang nâng cấp từ rspec 2.99 lên rspec 3.0.3 và đã chuyển đổi các phương thức phiên bản để sử dụng allow_any_instance_of, nhưng chưa tìm ra cách khai thác một phương thức lớp. Tôi có mã như thế này:

module MyMod
  class Utils
    def self.find_x(myarg)
      # Stuff
    end
  end
end

và thử nghiệm rspec 2 của tôi thực hiện điều này:

MyMod::Utils.stub(:find_x).and_return({something: 'testing'})

Cách Rspec 3 để làm điều này là gì?

Câu trả lời:


172

Bạn nên làm

allow(MyMod::Utils).to receive(:find_x).and_return({something: 'testing'})

Kiểm tra các sơ khai của Phương pháp doco .


Tôi đang cố gắng triển khai điều này nhưng khi tôi viết mô hình đó và sau đó viết, expect(Class.foo).to eq(bar)tôi nhận được "lỗi số đối số sai" vì foophương thức thường muốn 2 đối số .... nhưng tôi chỉ muốn nó trả về những gì tôi đã đặt trong sơ khai
sixty4bit

FWIW, biểu mẫu này sẽ làm hỏng trình thông dịch viên ruby ​​của tôi. Tuy nhiên, and_return không hoàn toàn cần thiết và có thể bỏ qua. (Thông dịch viên ruby của tôi cũng không sụp đổ.)
Ray Fix

2
@ sixty4bit Có lý do gì khiến bạn không thể gọi nó bằng các đối số không?
David Moles

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.