Ruby RSpec-如何测试包含HTTParty的类

Ruby RSpec-如何测试包含HTTParty的类,ruby,rspec,httparty,Ruby,Rspec,Httparty,我有这样一个代码: class FooBar include HTTParty def self.token fail Project::MissingToken unless Project::Config.key?("project_token") Project::Config.fetch("project_token") end base_uri "https://website.com/api" default_params token: tok

我有这样一个代码:

class FooBar
  include HTTParty

  def self.token
    fail Project::MissingToken unless Project::Config.key?("project_token")
    Project::Config.fetch("project_token")
  end

  base_uri "https://website.com/api"
  default_params token: token
end
现在我需要测试
Project::Config
不包含键并引发异常的情况。我在考虑这样的事情:

context "token is not given" do
  subject { Project::FooBar }

  it "should raise an error" do
    expect(Project::Config).to receive(:key?).with("project_token").and_return(false)
    expect { subject }.to raise_error(Project::MissingToken)
  end
end

但它不能正常工作。如何修复它?

将您的
主题更改为以下内容:

subject { described_class.token }

将您的
主题更改为以下内容:

subject { described_class.token }

或者忘记使用
subject
并直接内联它:
期望{Project::FooBar.token}。要引发_错误(Project::MissingToken)
。是的,@AndyWaite说了什么,但是我个人仍然会使用
descripted\u class
,而不是
Project::Foobar
。或者忘记使用
subject
,直接内联:
expect{Project::Foobar.token}。来引发错误(Project::MissingToken)
。是的,@AndyWaite说,但我个人仍然会使用
descripted\u class
而不是
Project::Foobar