2017-02-01 20 views
1

У меня есть файл с двумя классами в нем.Ruby rspec Издевательский класс

class LogStash::Filters::MyFilter< LogStash::Filters::Base 

и

class LogStash::JavaMysqlConnection 

JavaMysqlConnection имеет методы "инициализации" и "выбрать".

JavaMysqlConnection используется классом MyFilter и используется для запроса db, как вы, возможно, догадались.

Как мне высмеять методы «initialize» и «select» для возврата nil и массива соответственно?

Я попытался с помощью:

before(:each) do 
    dbl = double("LogStash::JavaMysqlConnection", :initialize => nil) 
end 

, но это не сработало, так как я до сих пор вижу отказ линии связи.

У меня есть Rspec версии 2.14.8

Спасибо заранее. PS. Я новичок в Ruby,

ответ

1

Исходя из ответа Андрея, решение, которое работало для меня было:

before(:each) do 
    mock_sql = double(:select=> sql_select_return) 
    allow(LogStash::JavaMysqlConnection).to receive(:new).and_return(mock_sql) 
end 
+0

'каждый' может быть опущен – Ilya

2
allow(LogStash::JavaMysqlConnection).to receive(:new).and_return(nil) 
allow(LogStash::JavaMysqlConnection).to receive(:select).and_return([]) 

Docs

RSpec

+0

Спасибо, слегка отредактированный ответ в соответствии с моя ситуация. См. Мой ответ. – user98651

+0

@ user98651 рад, вы решили! –