当前位置: 首页 > 面试题库 >

Capybara + Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?

郦翰学
2023-03-14
问题内容

配置: 使用RSpec,Capybara,Selemium驱动程序,SQLite数据库对Rails项目进行集成测试。

情况: 我没有对Capybara和默认的rack_test驱动程序进行集成测试。他们直接在数据库中创建用户注册(用于Devise
gem)。然后他们像用户一样使用Capybara DSL登录并测试场景。

问题: 我也尝试将驱动程序更改为Selenium来测试JavaScript代码。现在测试失败,因为应用程序看不到测试创建的用户注册。

研究: Selenium驱动程序在转换中的工作方式似乎有所不同,因此测试中所做的更改在Web应用程序中是不可见的。可能的解决方案包括:

config.use_transactional_fixtures = false 
DatabaseCleaner.strategy = :truncation

问题答案:

对我来说,从这里到这里工作解决方案:

  • 添加到Gemfile gem database_cleaner
  • 创建spec/support/javascript.rb包含内容的文件

`

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before(:each) do
    if example.metadata[:js]
      Capybara.current_driver = :selenium
      DatabaseCleaner.strategy = :truncation
    else
      DatabaseCleaner.strategy = :transaction
      DatabaseCleaner.start
    end
  end

  config.after(:each) do
    Capybara.use_default_driver if example.metadata[:js]
    DatabaseCleaner.clean
  end
end

`

尽管这对我的控制器和模型规格执行时间造成了小损失(从40到43秒)。



 类似资料:
  • 我可以使用Spring以编程方式创建和初始化嵌入式数据库: 或通过Spring配置: 这里,我的脚本和存储在目录中。因此,如果使用嵌入式数据库运行测试时: 然后,中的文件就可用了,一切都很好。 由:java.io.FileNotFoundException引起:无法打开类路径资源[schema.sql],因为它不存在 现在,如果我将脚本放入中,一切都可以工作了,但是这些脚本只是用来填充嵌入式数据库

  • 场景:我在Spring中开发了一个使用mysql 8数据库的微服务。这个数据库必须被初始化(创建一个数据库、一些表和数据)。在我的主机上,我用data.sql和schema.sql脚本初始化了数据库。问题是,我必须设置: 第一次执行。这将以我想要的方式初始化我的数据库。对于以后的运行,我必须对该命令进行注释。非常难看的解决方案,但我找不到更好的解决方案,我现在没有得到这个问题的答案。我认为测试它是

  • 我目前正在android studio中开发一个应用程序,因为我正试图在业余时间学习如何使用它,我的知识非常有限,所以我希望我能解释我的应用程序的概念,并向人们提供一些我可以使用的不同技术的建议。我的应用程序的基本思想是,它允许人们搜索名人,并显示他们的一些事实,他们的出生日期等。我知道它没有什么特别的,但它实际上是一个概念,可以帮助我提高我的android studio知识。 我的主要问题是以一

  • Junit4中是否有方法将一些预初始化的数据(如http连接)传递给所有子(即套件)测试类,这些数据是使用带有“@RunWith(Suite.class)”注释的类中的“@ClassRule”初始化的?还有,如何确保套件中的类不能单独运行? 例如 谢谢, 帕迪

  • 我想不出如何使爆米花工作,如下所示:https://getbootstrap.com/docs/4.0/components/popovers/. 文档中提到了popover支持是一个插件,并且需要工具提示插件,所以我修改了我的要添加这两个,现在看起来如下所示: 我还没有找到任何关于引导插件概念的文档,所以上面关于和的两行来自搜索,不确定它们是否正确。 留档声明: Popovers是基于性能原因选

  • 我正在定义自己的Liquibase自动配置来管理多租户,这涉及一个原型bean: 原型bean在运行时通过