ruby 是否有一个rspec匹配器来确认一个类包含一个库、模块或gem?

eoigrqb6  于 2023-03-17  发布在  Ruby
关注(0)|答案(3)|浏览(126)

使用minitest找到了这个教程,我想知道在rspec中是否有一个等价的匹配器:
Interesting minitest assertion

describe "default attributes" do

  it "must include httparty methods" do
    Dish::Player.must_include HTTParty
  end

  it "must have the base url set to the Dribble API endpoint" do
    Dish::Player.base_uri.must_equal 'http://api.dribbble.com'
  end

end
4bbkushb

4bbkushb1#

测试类是否包含模块通常是错误的,因为您测试的是实现细节而不是预期行为。
可以通过在类上调用ancestors来找到包含的模块,因此您可以简单地使用include匹配器:

expect(Dish::Player.ancestors).to include(HTTParty)

你的第二个期望应该用以下方法来测试:

expect(Dish::Player.base_uri).to eq 'http://api.dribbble.com'

编辑

直到今天我才知道类实现了<=>操作符。你可以简单地检查Dish::Player < HTTParty是否是。

0g0grzrc

0g0grzrc2#

您可以使用以下命令测试类是否直接包含模块:

expect(described_class < MyModule).to eq(true)
tjjdgumg

tjjdgumg3#

您可以使用be_kind_of,它也适用于包含的模块:

it { is_expected.to be_kind_of(HTTParty) }

相关问题