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