Как я могу утверждать при инициализации поведения с RSpec? - PullRequest
5 голосов
/ 18 января 2011

У меня есть класс сообщений, который можно инициализировать, передав аргументы в конструктор или не передав аргументы, а затем задав атрибуты позже с помощью методов доступа. В методах установки атрибутов происходит некоторая предварительная обработка.

У меня есть тесты, которые гарантируют, что методы сеттера делают то, что они должны, но я не могу найти хороший способ проверить, что метод initialize действительно вызывает сеттеры.

class Message
  attr_accessor :body
  attr_accessor :recipients
  attr_accessor :options

  def initialize(message=nil, recipients=nil, options=nil)
    self.body = message if message
    self.recipients = recipients if recipients
    self.options = options if options
  end

  def body=(body)
    @body = body.strip_html
  end
  def recipients=(recipients)
    @recipients = []
    [*recipients].each do |recipient|
      self.add_recipient(recipient)
    end
  end
end

1 Ответ

4 голосов
/ 31 января 2011

Я бы хотел проверить поведение инициализатора,

т.е. что его настройки переменных, как вы ожидаете.

Не увлекаясь фактами того, как вы это делаете, предположите, что базовые средства доступа работают, или, в качестве альтернативы, вы можете установить переменные экземпляра, если хотите. Это почти старый добрый юнит-тест.

, например

describe "initialize" do
  let(:body) { "some text" }
  let(:people) { ["Mr Bob","Mr Man"] }
  let(:my_options) { { :opts => "are here" } }

  subject { Message.new body, people, my_options }

  its(:message)    { should == body }
  its(:recipients) { should == people }
  its(:options)    { should == my_options }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...