2013-06-07 2 views
2

Я новичок в RSpec, так что медведь со мной!Rspec - издевательство над методом в другом классе

Вот мой код.

TestFile:

before(:all) do 
    @package = Package.new("testing") 
    @param_source = "cat #{root}/file/test.json" 
end 

"it should update the version params appropriately" do 
    group_params = mock("params") 
    group_params.expects(:each).multiple_yields([["staging", @param_source]]) 
    @package.update_version(group_params) 
    # Some assertions here 
end 

Класс файла:

class Package 
    def initialize(db_file) 
    # Some http options set for httparty 
    end 

    def update_version(group_params) 
    group_params.each do |environment, param_source| 
     group_json = JSON.parse(HTTParty.get(param_source, @http_cred)) 
     # Bunch more stuff done here 
    end 

В принципе, у меня есть test.json, что я хочу использовать, чтобы убедиться, что все становится корректно распознаны. Этот вызов HTTParty.get ожидает, что GET-вызов будет выполнен. Есть ли способ, которым я могу издеваться над этим с переменной param_source. Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию здесь. Спасибо за помощь!

ответ

8

Заглушка:

HTTParty.stub(get: file_content) 

или насмешка:

HTTParty.should_receive(:get).with(foo, bar).and_return(file_content) 

или гася в новом RSpec синтаксиса:

allow(HTTParty).to receive(:get).and_return(file_content) 

или издевательским в новом синтаксисе:

expect(HTTParty).to receive(:get).with(foo, bar).and_return(file_content) 
+0

У меня есть 3 запроса http-запроса с различными ответами. Как я могу заглушить все три с помощью '' allow (HTTParty) .to получать (: get) .and_return (file_content) ''. Могу ли я использовать URL-адрес запроса в приведенном выше синтаксисе? – Santanu

Смежные вопросы