私はCapybaraをRailsで使用する上で問題があります。それだけで面白いテストのことをテストします。 OK、付属のコードには同等のテストがいくつかあります。最初のものは、Railsに付属のshoulda-context + Test :: Unitで作られています。 2回目のテストは、カピバラと文脈が必要です。Capybaraの問題:@requestはActionDispatch :: Requestである必要があります
require 'integration_test_helper'
class UsersTest < ActionDispatch::IntegrationTest
fixtures :all
context "signup" do
context "failure" do
setup do
@attr = { :name => "", :email => "", :password => "", :password_confirmation => "" }
end
should "not make a new user" do
assert_no_difference 'User.count' do
post_via_redirect "users", :user =>@attr # enviem les dades d'un nou usuari via create (POST /users)
assert_template 'users/new' # ens retorna a users/new, que significa que no s'ha creat l'usuari
assert_select "div#error_explanation" # comprovem que conte missatges d'error
end
end
should "not make a new user (capybara)" do
assert_no_difference 'User.count' do
visit '/signup'
fill_in 'Name', :with => @attr[:name]
fill_in 'Email', :with => @attr[:email]
fill_in 'Password', :with => @attr[:password]
fill_in 'Confirmation', :with => @attr[:password_confirmation]
click_button 'Sign Up!'
assert_template 'users/new' # ens retorna a users/new, que significa que no s'ha creat l'usuari
assert_select "div#error_explanation" # comprovem que conte missatges d'error
end
end
end
end
最初のものはOK動作しますが、1は、このエラーメッセージスローカピバラ:
================================================================================
Error:
test: signup failure should not make a new user (capybara). (UsersTest):
ArgumentError: @request must be an ActionDispatch::Request
test/integration/users_test.rb:30:in `block (4 levels) in <class:UsersTest>'
test/integration/users_test.rb:23:in `block (3 levels) in <class:UsersTest>'
================================================================================
が必要* integration_test_helper.rb *ファイルは、私の周りグーグルで見つけたすべてのsuposedソリューションのアキュムレータでありますそれは私にとってはうまくいかない。
require 'test_helper'
require 'capybara/rails'
require 'database_cleaner'
# Transactional fixtures do not work with Selenium tests, because Capybara
# uses a separate server thread, which the transactions would be hidden
# from. We hence use DatabaseCleaner to truncate our test database.
DatabaseCleaner.strategy = :truncation
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
# Stop ActiveRecord from wrapping tests in transactions
self.use_transactional_fixtures = false
teardown do
DatabaseCleaner.clean # Truncate the database
Capybara.reset_sessions! # Forget the (simulated) browser state
Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
end
end
誰か解決策はありますか?私はwebratのような別の統合frmaworkを試すべきですか?
私のセットアップは次のとおりです。また、
[email protected]:~/Desenvolupament/Rails3Examples/ror_tutorial$ rake about
About your application's environment
Ruby version 1.9.2 (x86_64-linux)
RubyGems version 1.8.15
Rack version 1.3
Rails version 3.1.3
JavaScript Runtime therubyracer (V8)
Active Record version 3.1.3
Action Pack version 3.1.3
Active Resource version 3.1.3
Action Mailer version 3.1.3
Active Support version 3.1.3
Middleware ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000002b9bac0>, Rack::Runtime, Rack::MethodOverride, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::RemoteIp, Rack::Sendfile, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, ActionDispatch::Head, Rack::ConditionalGet, Rack::ETag, ActionDispatch::BestStandardsSupport
Application root /mnt/dropbox/Dropbox/DESENVOLUPAMENT/Rails3Examples/ror_tutorial
Environment development
Database adapter sqlite3
Database schema version 20120127011330
shoulda-context (1.0.0)
capybara (1.1.2)
おかげ
私はあなたの指示にしたがって修正しようとしましたが、 'current_path.should == new_user_path'は動作しません。私はそれがRSpecだと私はRSpecを使用していないと思う。また、 'assert current_path、 '\ signup''は動作しません。どのように私はcurrent_pathをチェックできますか? –
実際、ええと、*合致者はRSpecの一部です。私の間違い。しかし、 'current_path'は' include Capybara :: DSL'に含まれているDSLの一部として定義されています。 'current_path'を使用しようとすると、定義されていないエラーが発生していますか? – Ryan
私はあなたに同意していませんが、なぜrspecがrequest specsのために 'render_template'と' redirect_to'メソッドを具体的に記述しているのかを説明できますか?(この好きなページで)(https://www.relishapp.com/rspec/rspec -rails/docs/request-specs/request-spec)?彼らは私のために働いていない(OPと同じエラーを受け取る)と私はなぜ好奇心です。 – bricker