簡體   English   中英

斷言 Ruby 模塊擴展了另一個模塊

[英]Assert that Ruby module extends another module

我有兩個模塊 A 和 B,我將 A 擴展到 B 以便將 B 中的 A 的方法用作類方法:

module A
   def foo
   end 
end 

module B
   extend A
end 

B.Foo

我想寫一個測試來斷言模塊 B 擴展了 A。目前 Ruby 沒有實現擴展? 方法,但我認為這將是一個好主意。 無論如何斷言一個模塊擴展了另一個模塊? 我可以使用 responds_to 嗎? 方法,但我必須遍歷擴展模塊中的所有方法,我認為這不是一個很好的設計。 再次感謝,平安。

我同意@spickermann 的評論,即這似乎不是一個有用的測試,他說:

included_singleton_modules = B.singleton_class.included_modules #[A, Kernel]
assert(included_singleton_moduls.include? A)

給你你想要的。

class C
  include M
end

本質上只是將M作為C的超類“插入”到祖先鏈中。 或者,更准確地說,它從M創建一個包含類,使該包含類成為C的超類,並使C的舊超類成為包含類的超類。

此外,

class C
  extend M
end

本質上是一樣的

class << C
  include M
end

即它將M插入到C單例類的祖先鏈中。

由於C是其單例類的實例,而M是單例類的超類,因此CM的實例。

這意味着您需要做的就是

B.is_a?(A)
#=> true

但是,正如其他答案和評論中提到的那樣,您並不真正關心BA的實例。 關心的是當你調用B.foo時,你會得到你期望的行為。 所以,斷言.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM