硒与水豚失败测试
问题描述:
我有一个与我的硒测试的问题,它看起来像测试数据不会被添加到正确的环境或硒试图读取错误的。硒与水豚失败测试
的下面测试通过,而不: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)
)。
这有道理吗?
这绝对不是一个计时问题,因为我已经改变了Capybara的默认等待时间,并且在运行时观察测试(如果登录不成功,就会显示一条消息)。如果Selenium测试仍然没有从相同的环境中读取,即当'login_controller'执行'create'动作时'测试'?如果不是,你应该如何测试一个页面,JS依赖于数据库中的记录? – SteWoo 2014-08-27 19:28:01
我假设你已经尝试单独运行测试?您可以尝试从混合中清除数据库清理器,并在每次运行spec之后通过运行'bundle exec rake db:test:prepare'手动重置测试数据库。 – dleve123 2014-08-28 00:10:37
是的,我正在运行它自己的。我删除了数据库清理器配置,并在事务性和非事务性夹具之间切换,但没有运气。我也尝试了很多不同的数据库清洁配置组合,但仍然没有运气。问题似乎是在测试中打印出数据时,数据在模型中,但是在控制器中打印输出时模型中没有数据。任何想法为什么? – SteWoo 2014-08-28 09:15:18