Forum: RSpec response.should have_text leads to undefined method `has_text?'

Posted by Kai Schlamp (Guest)
on 2010-10-02 21:44
(Received via mailing list)
A big hello.

I would like to test a controller that directly renders some JSON output 
(by using "render :json => @entity_names"). For that task I tried in my 
spec file "response.should have_text('["enim", "enita"]')". 
Unfortunately I always get that error:
Failure/Error: response.should have_text('["enim", "enita"]')
undefined method `has_text?' for " ":String

(Also a "response.body.should have_text('["enim", "enita"]')as someone 
suggested on Stackoverflow did not solve the problem.)

Do I miss some gem that provides that method? Here my 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

Best regards,
Kai
Posted by David Chelimsky (Guest)
on 2010-10-02 22:05
(Received via mailing list)
On Oct 2, 2010, at 2:27 PM, Kai Schlamp wrote:

> A big hello.
> 
> I would like to test a controller that directly renders some JSON output (by using "render :json => @entity_names"). For that task I tried in my spec file "response.should have_text('["enim", "enita"]')". Unfortunately I always get that error: 
> Failure/Error: response.should have_text('["enim", "enita"]') 
> undefined method `has_text?' for " ":String

have_text is not supported in rspec-2.

For JSON, I like to deserialize the output and match against the decoded 
JSON:

json = ActiveSupport::JSON::decode(response.body)
json.should eq(%w[enim enita])

Then you could wrap that in a matcher:

RSpec::Matchers.define :be_json do |expected_json|
  match do |response|
    json = ActiveSupport::JSON::decode(response.body)
    json.should == expected_json
  end
end

response.should be_json(%w[enim enita])

HTH,
David
Posted by Kurt (Guest)
on 2011-01-13 20:09
(Received via mailing list)
Where are the changes to RSpec2 documented?  I haven't been able to find 
a
list of changes that would include something like this removal of
have_text.  Thanks.
Posted by David Chelimsky (Guest)
on 2011-01-13 20:45
(Received via mailing list)
On Jan 13, 2011, at 1:04 PM, Kurt wrote:

> Where are the changes to RSpec2 documented?  I haven't been able to find a list 
of changes that would include something like this removal of have_text.  Thanks.

have_text being pulled is not documented yet. Oversight on my part. Just 
added an issue for it:

https://github.com/rspec/rspec-rails/issues/issue/305

per other email on this list:

official docs are at http://relishapp.com/rspec.

Info about contributing to the docs can be found there and at 
http://blog.davidchelimsky.net/2010/12/23/rspec-2-....
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.