Методы тестирования, вызываемые на полученном объекте - PullRequest
0 голосов
/ 11 мая 2010

У меня есть следующий тестовый пример контроллера:

def test_showplain
  Cleaner.expect(:parse).with(@somecontent)
  Cleaner.any_instance.stubs(:plainversion).returns(@returnvalue)

  post :showplain, {:content => @somecontent}

end

Это прекрасно работает, за исключением того, что я хочу, чтобы "заглушки (: plainversion)" были "ожидаемыми (: plainversion)".

Вот код контроллера:

def showplain
   Cleaner.parse(params[:content]) do | cleaner |
      @output = cleaner.plainversion
   end
end

А уборщик это просто:

class Cleaner

   ### other code and methods ###

   def self.parse(@content) 
     cleaner = Cleaner.new(@content)
     yield cleaner
     cleaner.close
   end

   def plainversion
      ### operate on @content and return ###
   end

end

Опять же, я не могу понять, как надежно протестировать «очиститель», предоставляемый методом «разбора». Есть предложения?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

Вы можете найти документацию для Mocha :: Expectation # выходов полезной.

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

0 голосов
/ 13 мая 2010

Это немного сложно. Самый простой подход - разбить проблему на две части: тестирование контроллера и тестирование контроллера.

У вас есть тестирование набора контроллеров - просто удалите свое ожидание в отношении вызова обычной версии.

Затем отдельно вы хотите протестировать метод Cleaner.parse.

cleaner = Cleaner.new('x');
cleaner.expects :close

Cleaner.expects(:new).returns(cleaner)

called_with = nil
Cleaner.parse('test') do |p|
  called_with = p
end
assert_equal p, cleaner

Это не очень понятно, что происходит. Заставляет меня думать, что есть более простая версия этого. Может ли уборщик быть простой функцией, которая принимает строку и возвращает другую? Пропустить все уступки и переменную область видимости? Это будет намного легче проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...