2010-10-01 2 views
1

Я хотел бы протестировать контроллер, который напрямую отображает некоторый вывод JSON (используя «render: json => @entity_names»). Для этой задачи я попытался в своем spec-файле «response.should have_text (« [enim »,« enita »]») ». К сожалению, я всегда получаю эту ошибку: Ошибка/ошибка: response.should have_text ('["enim", "enita"]') undefined method `has_text? ' для #response.should have_text приводит к неопределенному методу `has_text? '

Я пропустил какой-то камень, который обеспечивает этот метод? Вот мой Gemfile:

source 'http://rubygems.org' 

gem 'rails', '>= 3.0.0' 
gem 'mysql2' 
gem 'mongrel' 
gem 'devise' 
gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git', :branch => 'rails3' 
gem 'thinking-sphinx', :git  => 'git://github.com/freelancing-god/thinking-sphinx.git', :branch => 'rails3', :require => 'thinking_sphinx' 

group :test, :development do 
    gem 'rspec-rails', '>= 2.0.0.beta.19' 
    gem 'steak', :git => 'git://github.com/cavalle/steak.git' 
    gem 'webrat' 
    gem 'capybara' 
    gem 'capybara-envjs' 
    gem 'shoulda' 
    gem 'launchy' 
    gem 'autotest' 
    gem 'autotest-rails' 
    gem 'test_notifier' 
    gem 'rails3-generators' 
    gem 'factory_girl_rails' 
    gem 'populator' 
    gem 'faker' 
    gem 'random_data' 
    gem 'database_cleaner', :git => 'git://github.com/bmabey/database_cleaner.git' 
    gem 'delorean' 
end 
+2

response.body.should have_text (...) – Eimantas

+0

Не решает проблему. Еще неопределенный метод 'has_text? '. Я также не могу найти определение метода «has_text»? где-нибудь в моих драгоценных камнях, используя grep. Существует такой метод в огурце, но также добавление, что в Gemfile не удалось решить проблему (возможно, потому, что я не выполняю интеграционный тест). – Zardoz

+0

Я собирался предложить установку Webrat, но я вижу, что он уже указан там (у меня была аналогичная проблема с RSpec и методом has_content, который был разрешен с Webrat). В отдельном примечании методы has_ ​​* и has_ ​​* реализуются с отсутствующими функциями метода, поэтому вы не найдете их в исходной дословной. – nocash

ответ

1

Вы можете построить свой ожидаемый результат как JSON, а затем получить тело ответа (который также является JSON), декодировать оба, и сравнить их. Что-то вроде:

it "should do something" do 
    expected = { :some_key => "and some value" }.to_json 
    xhr :post, :create, { :foo => "bar" } 
    ActiveSupport::JSON.decode(response.body).should == ActiveSupport::JSON.decode(expected) 
end 
+0

Да, вот как я это делаю сейчас. – Zardoz

+0

Это своего рода неряшливое обходное решение. Не уверен, что проблема была здесь, но вот вопрос с более новыми ответами: http://stackoverflow.com/questions/8688925/capybara-rspec – mtjhax

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