cuốn sách gpt4 ai đã làm

Ruby - Kiểm tra xem một phương thức có yêu cầu một khối không

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 18:05:45 26 4
mua khóa gpt4 Nike

Làm cách nào để xác minh Foobar#some_method Cho dù nó chiếm một khối. Tương tự như Foobar.new.respond_to?(:some_method)

lớp học Foobar
chắc chắn một số_method
năng suất
end
end

为什么?

Điều này rất hữu ích cho việc thử nghiệm các giao diện hợp đồng. Đảm bảo phương thức sơ khai của tôi có API không thay đổi.

Những gì tôi đã thử

mth = Foobar.new.method(:some_method)
mth.parameter

Điều này trả về một danh sách tham số (về cơ bản Rspec sử dụng). Nếu tôi có một tham số khối như thế này thì nó hoạt động:

def some_method(&blk)
end

Nhưng nếu một phương pháp sử dụng năng suất Thay vào đó, tôi bắt đầu với #thông số Không có gì đạt được.

Điều này nhằm bổ sung các thông số kỹ thuật để đảm bảo giao diện với thế giới bên ngoài xấu xí. Vì vậy, tôi biết một phương pháp hoạt động như thế nào. Nhưng nếu có thay đổi về API, tôi muốn thông số kỹ thuật không thành công.

câu trả lời hay nhất

Làm cách nào tôi có thể xác minh nếu Foobar#some_method mất một khối.

mọi thứ đều bằng ruby Tất cả các phương thức đều yêu cầu (có thể sử dụng) một khối. Nó có thể đơn giản chọn không nhượng bộ. Vì vậy, tôi nghĩ đó là điều bạn cần kiểm tra: liệu phương pháp đó có thành công hay không.

RSpec có nhiều kỳ vọng đầu ra:https://relishapp.com/rspec/rspec-expectations/docs/build-in-matchers/yield-matchers

RSpec.describe "trình so khớp năng suất_control" làm
chỉ định { mong đợi { |b|
chỉ định { mong đợi { |b|
chỉ định { mong đợi { |b|
chỉ định { mong đợi { |b| MyClass.yield_twice_with(1, &b) }.to energy_control.exactly(2).time }
chỉ định { mong đợi { |b| MyClass.yield_twice_with(1, &b) }.to energy_control.at_least(1) }
chỉ định { mong đợi { |b| MyClass.yield_twice_with(1, &b) }.to energy_control.at_most(3).time }

end

Vì vậy, đối với trường hợp của bạn, nó sẽ trông như thế này:

mong đợi{ foobar.some_method}.to energy_control

Về ruby ​​​​- kiểm tra xem một phương thức có yêu cầu khối hay không, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/46307558/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress