Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中进行测试。似乎它会在一次测试运行中删除记录。思想?_Ruby On Rails_Testing_Cucumber_Capybara - Fatal编程技术网

Ruby on rails 在Rails中进行测试。似乎它会在一次测试运行中删除记录。思想?

Ruby on rails 在Rails中进行测试。似乎它会在一次测试运行中删除记录。思想?,ruby-on-rails,testing,cucumber,capybara,Ruby On Rails,Testing,Cucumber,Capybara,让我们看一下下一个场景: Scenario: Show welcome feed Given log me in When I'm on "profile" page Then Page should have content "You are welcome" 很简单。让我登录步骤怎么样 Given /^log me in$/ do @user = FactoryGirl.create :user, email: 'user@mail.ru', password: '1234

让我们看一下下一个场景:

Scenario: Show welcome feed
  Given log me in
  When I'm on "profile" page
  Then Page should have content "You are welcome"
很简单。让我登录
步骤怎么样

Given /^log me in$/ do
  @user = FactoryGirl.create :user, email: 'user@mail.ru', password: '12345678', username: '
  visit sign_in_path
  fill_in 'user_email', with: 'user@mail.ru'
  fill_in 'user_password', with: '12345678'
  click_on 'Enter'
end
没什么复杂的。但是,当我运行此方案时,它无法让我登录,因为没有提供电子邮件的用户。哈哈什么?在我尝试创建并登录用户的其他场景中也会发生这种情况

  • 这是一个全球性问题。我无法创建和测试任何记录
  • 它以前工作过,场景和步骤没有任何变化
  • 它起作用了 在开发生产环境中。所以我想这是环境问题

有什么想法吗?如何调试此功能?

由于这一行,每次测试后您的数据都会被删除

# spec/rails_helper.rb
config.use_transactional_fixtures = true
尝试将此更改为
false
,则数据将保持不变。有关更多信息,请参阅


但是,始终保持数据的持久性并不好。我建议您自己使用来管理数据。这对于水豚/黄瓜来说是有很好的记录的

如果没有您正在使用的配置,很难说清楚,但既然您说它曾经工作过,我们就假设配置都是正确的。如果是这样的话,你“当我在…页面上”的步骤实际上是访问一个页面,而不仅仅是检查当前路径,那么,你最可能经历的是,水豚行动不保证是同步的,即在该行动触发的行动/副作用完成之前,对水豚行动的调用可能会返回。在这种情况下,
单击“输入”
会提交您的登录信息,但不会等待登录真正完成。如果当我在“配置文件”页面时,
,然后在登录完全完成之前执行新的访问操作,则浏览器中将不会设置cookies来标识它已登录。因此,尝试访问配置文件页面将表现为用户未登录。您需要添加的是“登录我”步骤中的最后一行,以确认登录已完成,如

expect(page).to have_text('You are now logged in') # whatever text shows up when a user successfully logs in


它不是在每次测试后删除的,而是在一个测试套件中删除的。这就是问题所在。From:“由于事务通常不在线程之间共享,这将导致您在测试代码中放入数据库的数据对Capybara不可见。”您是否设置了截断而不是事务?set,没有更改。请使用数据库更新您的问题。您是否使用
gem'factory\u girl\u rails'
gem在rails控制台
FactoryGirl.create
请让我知道
rake db:test:prepare
ran?我使用
factory\u girl\u rails
db:test:prepare已弃用。Rails测试助手现在自动维护您的测试模式。我已经通过Selenium对其进行了测试,我看到Desive出现了record not found错误。然后,您需要提供有关配置的更多详细信息、确切的错误消息、日志等,以便任何人都有机会了解您的问题
expect(page).to have_selector('#user_menu') # selector for some element that is only on pages when a user is logged in