硒与Capybara失败测试

时间:2014-08-27 11:53:46

标签: ruby-on-rails selenium-webdriver capybara capybara-webkit database-cleaner

我的Selenium测试有问题,看起来测试数据没有被添加到正确的环境中,或者Selenium试图从错误的环境中读取。

下面的测试没有:js => true,但随之失败

it "allows the user to create a new test", :js => true do
    FactoryGirl.create(:user, email:'test@test.com', password:'passw0rd')

    p 'Here'
    p User.all

    visit '/' # Login view

    fill_in "email", with: 'test@test.com'
    fill_in "password", with: "passw0rd"
    click_button 'Login'

    expect(current_path).to eq '/home'
end

测试失败,因为用户没有登录,因此没有到达'/ home'。我添加了打印输出以查看用户是否实际上已添加到数据库中并且它是...

"Here"
#<ActiveRecord::Relation [#<User id: 1, email: "test@test.com", password: "$2a$10$JQBuNH95JWDjCTx0OH7JMuxcO.0XgAz6wtYc/2G8pps...", created_at: "2014-08-27 11:34:44", updated_at: "2014-08-27 11:34:44">]>

然而,当我向我的login_controller

添加另一个打印件时
def create
    p 'Here 2'
    p User.all
    ... # User authenitcation
end

控制台看起来像

"Here"
#<ActiveRecord::Relation [#<User id: 1, email: "test@test.com", password: "$2a$10$JQBuNH95JWDjCTx0OH7JMuxcO.0XgAz6wtYc/2G8pps...", created_at: "2014-08-27 11:34:44", updated_at: "2014-08-27 11:34:44">]>
"Here 2"
#<ActiveRecord::Relation []>

因此,出于某种原因,在进行身份验证时,测试中添加的用户不在数据库中,这让我觉得Selenium正在考虑不同的环境,即应该关注的开发时间测试

如果它有帮助,那么我的spec_helper文件中有一些带有database_cleaner config

...

RSpec.configure do |config|

    config.use_transactional_fixtures = false

    config.before(:suite) do
      DatabaseCleaner.strategy = :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

有关如何解决此问题的任何想法?我不知道Selenium是在查看错误的环境还是我的database_cleaner配置错误

1 个答案:

答案 0 :(得分:0)

创建操作中的p输出并不太令人惊讶 - 我相信JS测试在不同的线程中运行(浏览器和服务器没有同步),所以世界状况可能很好执行创建操作中的p时会有所不同。确认存在计时问题的一件事是在sleep(3)步骤之后立即在测试中添加一个等待时间(如click_button)。

这有意义吗?