硒与水豚失败测试

问题描述:

我有一个与我的硒测试的问题,它看起来像测试数据不会被添加到正确的环境或硒试图读取错误的。硒与水豚失败测试

的下面测试通过,而不:js => true但与它失败

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

    p 'Here' 
    p User.all 

    visit '/' # Login view 

    fill_in "email", with: '[email protected]' 
    fill_in "password", with: "passw0rd" 
    click_button 'Login' 

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

,因为用户不获取登录并因此没有达到“/家”的测试失败。我加了打印输出,以查看用户是否实际上被添加到该数据库中,这是...

"Here" 
#<ActiveRecord::Relation [#<User id: 1, email: "[email protected]", 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: "[email protected]", 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 []> 

因此,对于一些原因,在试验所添加的用户不是在验证正在进行时的数据库,导致我认为硒是厕所国王在不同的环境下,即应该在考虑测试时的发展?

如果它帮助这里是我的一些spec_helper文件与database_cleaner配置

... 

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配置错了

p在create action中的输出并不是太奇怪 - 我相信JS测试运行在不同的线程中(浏览器和服务器没有同步),所以在创建动作中执行p时,世界的状态可能会有所不同。你可以做的一件事是确认是否存在计时问题,在click_button步骤之后立即在测试中加上一个等待(如sleep(3))。

这有道理吗?

+0

这绝对不是一个计时问题,因为我已经改变了Capybara的默认等待时间,并且在运行时观察测试(如果登录不成功,就会显示一条消息)。如果Selenium测试仍然没有从相同的环境中读取,即当'login_controller'执行'create'动作时'测试'?如果不是,你应该如何测试一个页面,JS依赖于数据库中的记录? – SteWoo 2014-08-27 19:28:01

+0

我假设你已经尝试单独运行测试?您可以尝试从混合中清除数据库清理器,并在每次运行spec之后通过运行'bundle exec rake db:test:prepare'手动重置测试数据库。 – dleve123 2014-08-28 00:10:37

+0

是的,我正在运行它自己的。我删除了数据库清理器配置,并在事务性和非事务性夹具之间切换,但没有运气。我也尝试了很多不同的数据库清洁配置组合,但仍然没有运气。问题似乎是在测试中打印出数据时,数据在模型中,但是在控制器中打印输出时模型中没有数据。任何想法为什么? – SteWoo 2014-08-28 09:15:18