根据此示例中的一些信息:http://snippets.aktagon.com/snippets/644-how-to-test-authentication-with-devise-capybara-minitest我测试了一半。但 click_on 方法未提交表单。我还试过 click_button'登录'和 page.execute_script(“$('form')。submit()”),没有任何运气。这是'测试:
# test/integration/login_test.rb
require "test_helper"
require "minitest/rails/capybara"
class LoginTest < ActionDispatch::IntegrationTest
include Rails.application.routes.url_helpers
include Capybara::DSL
include Warden::Test::Helpers
Warden.test_mode!
let(:user) { User.new(email: "example@blah.com", password: "password") }
it "will login successfully" do
visit new_user_session_path
fill_in 'user_email', with: user.email
fill_in 'user_password', with: user.password
click_on 'Sign in'
current_path.must_equal dashboards_path
page.must_include 'Signed in successfully'
end
end
根据 page.execute_script 方法错误,它说 Capybara :: NotSupportedByDriverError异常:Capybara :: Driver :: Base #execute_script ,在这里读完另一个问题之后我添加了cappybara-webkit来尝试完成这项工作。但没有改变。
目标表单提交按钮如下:
<input class="btn btn-default" name="commit" value="Sign in" type="submit" />
测试错误显示为:
LoginTest
test_0001_will login successfully FAIL (0.38s)
Minitest::Assertion: Expected: "/dashboards"
Actual: "/users/sign_in"
test/integration/login_test.rb:17:in `block in <class:LoginTest>'
我查看了带有byebug的 page.html ,并且没有看到有关无效用户等的任何错误。我确实看到了电子邮件和密码的价值。页面表单似乎没有提交。
答案 0 :(得分:1)
鉴于您的上次评论,您无法进行身份验证。您想避免使用Factory。所以你想使用Fixture,这也是我也在使用的。
在我的情况下,这是我的users.yml文件(我称之为我的用户所有者),这对我来说是测试/固定装置:
owner:
# column: value
first_name: 'Testy'
last_name: 'McTesterton'
email: 'test@test.com'
encrypted_password: <%= Devise.bcrypt(Owner, 'password') %>
admin: false
confirmed_at: <%= Time.now %>
我选择了Devise确认选项,所以我必须为它创建一个confirmed_at。如果你不这样做,你将不需要那样做。你必须有一个字段用于你打开的任何东西,虽然这会验证一个用户,希望它不会超过confirmed_at。我只能帮助确认:)。 “admin”字段是因为我有一个管理员选项。
这将创建您的用户,您可以使用上面的登录方法登录。我猜它会对你有用,因为它适用于我。