我的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配置错误
答案 0 :(得分:0)
创建操作中的p
输出并不太令人惊讶 - 我相信JS测试在不同的线程中运行(浏览器和服务器没有同步),所以世界状况可能很好执行创建操作中的p
时会有所不同。确认存在计时问题的一件事是在sleep(3)
步骤之后立即在测试中添加一个等待时间(如click_button
)。
这有意义吗?