2013-05-02 2 views
2

Мне нужно войти в систему перед выполнением моих тестов, которые будут использовать JS. Значок на странице работает (кроме этого теста).Невозможно войти в систему с пользователем/данными FactoryGirl

require 'spec_helper' 
require 'capybara/poltergeist' 
include Capybara::DSL 
Capybara.javascript_driver = :poltergeist  

describe "Application", js: true do 
    describe "when logged in", js: true do 
    let(:user) { FactoryGirl.create(:user) } 
    before do 
     visit signin_path 
     fill_in "Email", with: user.email 
     fill_in "Password", with: user.password 
     click_button "Sign in" 
    end 
    it "can authenticate user" do 
     User.all.first.authenticate(user.password).email.should == user.email 
    end 
    end 
end 

Проблема заключается в том, что нажатие кнопки «Вход» кнопка возвращает обратно на страницу с «недопустимой пользователя/пароль» комбинации (как если пользователь не в БД). Дело в том, что, по-видимому, использование действительно IS в базе данных, и пароль прав (тест «может аутентифицировать пользовательские проходы»).

Я сделал снимок экрана, прежде чем нажимать кнопку «Войти», и поля заполнены правильно. Я попытался создать пользователя внутри предыдущего блока, но он тоже не работал.

На странице входа нет ничего особенного, нет javascript или что-то еще. Просто сообщение обычной формы на сервере.

Любые идеи?

+0

Я имел эту проблему при использовании DeviseInvitable. - если маркер приглашения установлен, то он не позволит, что пользователю войти в Доне Предположим, это относится к вам? – RobHeaton

+0

Я не использую Devise, но не могли бы вы рассказать мне больше о вашей проблеме и о том, как вы ее решили? Это может дать мне ключ ... – Manuel

+0

DeviseInvitable предоставляет пользователям токены приглашения, и если один из них установлен, вы не можете войти в систему как этот пользователь. Мои фабрики создавали пользователей с токенами и поэтому не могли войти в систему как они. Сообщение об ошибке не помогло! – RobHeaton

ответ

7

Это происходило со мной некоторое время назад при использовании rspec и poltergeist. Проблема заключалась в том, что нить phantomjs не смогла увидеть запись, созданную FactoryGirl в дБ. Чтобы решить эту проблему, вам необходимо настроить подключение вашего db для совместного использования в вашем spec_helper.rb, добавив код ниже.

class ActiveRecord::Base 
    mattr_accessor :shared_connection 
    @@shared_connection = nil 

    def self.connection 
    @@shared_connection || retrieve_connection 
    end 
end 

# Forces all threads to share the same connection. This works on 
# Capybara because it starts the web server in a thread. 
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 

Вы можете найти более подробное объяснение here в пункте № 3.

+0

Если вы используете spork, тогда вы должны поместить его в блок Spork.each_run spec_helper. – Manuel

Смежные вопросы