在Rails应用程序中测试PORO

时间:2013-11-27 14:29:03

标签: ruby-on-rails ruby rspec

我使用Rspec来测试我的Rails应用程序。在我的Model目录中,我有一个名为location_services.rb的Ruby文件。在这个文件是

module LocationServices
  class IpLocator
     attr_reader :response, :status
     def initialize(response, status)
       ....
     end
end

如何自行测试IpLocator对象的创建?我只是想能够调用IpLocator.create_type_1.response并测试我在整个rails堆栈中获得的内容。

create_type_1是IpLocator上的一个类方法,它将调用new来实现一个对象。

1 个答案:

答案 0 :(得分:2)

我假设您的文件看起来更像是这样:

module LocationServices
  class IpLocator
    attr_reader :response, :status
    def initialize(response, status)
      ....
    end

    def self.create_type_1
      self.new
      # Possibly some more code here
    end
  end
end

您可以创建spec/models/location_services_spec.rb并将其结构如下:

require 'spec_helper'

describe LocationServices::IpLocator do
  describe '.create_type_1' do
    locator = LocationServices::IpLocator.create_type_1
    expect(locator).to # finish your assertion here
  end
end

命名约定可能无法正常工作。如果RSpec找不到所需的类,您可以尝试移动并将location_services.rb重命名为app/models/location_services/ip_locator.rb。如果您这样做,请将规范移动并重命名为spec/models/location_services/ip_locator_spec.rb

但是,要求spec_helper.rb文件可能会为您的测试加载Rails堆栈。这可能取决于您的文件设置方式。