加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 未能用Capybara测试Devise

发布时间:2020-12-16 19:50:55 所属栏目:百科 来源:网络整理
导读:我正在使用Devise构建一个Rails 3应用程序,用Capybara进行UI测试.以下测试失败: class AuthenticationTest ActionController::IntegrationTest def setup @user = User.create!(:email = 'test@example.com',:password = 'testtest',:password_confirmation
我正在使用Devise构建一个Rails 3应用程序,用Capybara进行UI测试.以下测试失败:
class AuthenticationTest < ActionController::IntegrationTest

  def setup
    @user = User.create!(:email => 'test@example.com',:password => 'testtest',:password_confirmation => 'testtest')
    @user.save!
    Capybara.reset_sessions!
  end

  test "sign_in" do
    # this proves the user exists in the database ...
    assert_equal 1,User.count
    assert_equal 'test@example.com',User.first.email

    # ... but we still can't log in ...
    visit '/users/sign_in'
    assert page.has_content?('Sign in')
    fill_in :user_email,:with => 'test@example.com'
    fill_in :user_password,:with => 'testtest'
    click_button('user_submit')

    # ... because this test fails
    assert page.has_content?('Signed in successfully.')
  end

end

…但我不知道为什么.从代码中可以看出,用户正在数据库中创建;我使用相同的方法来创建用户,就像我在seeds.rb中一样.

如果我通过调试器运行测试,我可以看到数据库中的用户,并验证该页面是否正在加载.但仍然认证失败;我可以验证这一点,因为如果我更改断言来测试故障情况,测试通过:

# verify that the authentication actually failed
assert page.has_content?('Invalid email or password.')

我习惯了Rails 2,&使用Selenium进行这种测试,所以我怀疑我在做某事.有人可以在这里指向正确的方向吗?

解决方法

我有同样的问题,发现 a thread with a solution:
RSpec.configure do |config|
  config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

对于DatabaseCleaner的工作,您需要包含database_cleaner gem.如果以前没有使用过,您可能需要在重新运行测试之前耙db:test:prepare.我希望这也适合你!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读