我正在使用React編寫Rails應用程序的測試代碼。 我使用RSpec,水豚,Poltergeist(PhantomJS 2.0)和設計進行身份驗證。RSpec /水豚/ Poltergeist登錄測試失敗
因爲這是一個javascript測試,我還使用建議的here的database_cleaner gem。 當測試運行時,我可以看到用戶數據進入數據庫(mysql),Devise方法user.valid_password?("password")
返回true,但是測試失敗。
spec_helper.rb
RSpec.configure do |config|
config.use_transactional_fixtures = false
Capybara.register_driver :poltergeist do |app|
options = {
inspector: true,
js_errors: false,
#debug: true,
phantomjs_options: %w[
--web-security=no
--ignore-ssl-errors=yes
--ssl-protocol=any
]
}
Capybara::Poltergeist::Driver.new(app, options)
end
Capybara.javascript_driver = :poltergeist
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
的規格如下所示。
require 'spec_helper'
feature 'Registration', js: true do
let!(:email) { "[email protected]" }
scenario "user can sign up and log in" do
visit 'sign_up'
find('input').set(email)
find('.submit').click
expect(page).to have_content('welcome!')
visit '/sign_out'
visit '/sign_in'
expect(page).to have_content('Login')
find('input[name="email"]').set(email)
find('input[name="password"]').set('password')
find('.submit').click
wait_for_ajax
expect(page).to have_content('Test User')
end
end
API看起來像這樣。
post do
email = params[:email]
password = params[:password]
if email.nil? or password.nil?
return error!(['this is error'], 401)
end
user = User.where(email: email.downcase).first
if user.nil?
return error!(['this is error'], 401)
end
if !user.valid_password?(password)
return error!(['this is error'], 401)
else
user.ensure_authentication_token
user.save
return { status: 'ok', results: { access_token: user.authentication_token } }
end
end
我用PhantomJS 2.0獲得如下所示的日誌。
API.ajax:POST /sessions
API.ajax:POST /sessions
API.ajax:POST /sessions :failed
httpStatus:401
error
[object Object]
API.ajax:POST /sessions :failed
httpStatus:401
error
[object Object]
所以在認證過程中出了點問題,但它只發生在我運行測試時。 (我可以註冊並使用Chrome或Firefox登錄。)
欣賞任何想法。
謝謝!