2010-10-01 20 views
1

我想測試直接呈現一些JSON輸出的控制器(通過使用「render:json => @entity_names」)。爲了這個任務,我嘗試在我的spec文件中「response.should have_text('[」enim「,」enita「]')」。不幸的是,我總是得到那個錯誤: 失敗/錯誤:response.should have_text('[「enim」,「enita」]') 未定義的方法`has_text?'爲#response.should have_text導致未定義的方法`has_text?'

我是否錯過一些提供該方法的gem?在這裏我的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 2010-10-01 05:34:25

+0

不能解決問題。仍然未定義的方法'has_text?'。我也找不到「has_text?」的方法定義在我的寶石中的任何地方使用grep。在黃瓜中有這樣一種方法,但是也加入到Gemfile中並沒有解決問題(也許是因爲我沒有運行集成測試)。 – Zardoz 2010-10-01 12:29:15

+0

我打算建議安裝Webrat,但是我看到它已經在那裏列出(我有一個與RSpec類似的問題,以及用Webrat解決的has_content方法)。在另一個註釋中,has_ *和have_ *方法是用缺少方法的函數實現的,所以你不會逐字地找到它們。 – nocash 2010-10-12 01:27:46

回答

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 2010-11-22 11:12:51

+0

這是一個馬虎的解決方法。不知道這裏有什麼問題,但這裏有一個問題與更近的答案:http://stackoverflow.com/questions/8688925/capybara-rspec – mtjhax 2012-01-24 02:20:34

相關問題