Tag: capybara

何时选择系统测试而不是集成测试Rails 5.1?

随着Rails 5.1的发布,它们包括了系统测试。 这意味着我们也可以在Rails中测试我们的JavaScript。 我看到Rails指南解释了以两种方式创建文章的示例测试:通过系统测试和集成测试。 现在问题是:在Rails 5.1之前,我在集成测试中编写了复杂的测试用例。 但现在我有两个选项来编写测试用例。 我可以写测试用例 test: should create article 在集成测试中,我也可以在系统测试中编写相同的测试用例。 那么我何时应该选择系统测试来编写测试用例以及何时选择集成测试?

Capybara webkit的数据库清理问题

我正在使用Cucumber编写我的集成测试和数据库清理程序以保持我的数据库清理。 一切都很完美,因为我的测试不需要Javascript。 我可以使用Capybara webkit让这些最后的测试通过,但是我的数据库根本没有被清除。 这是我的function/ support / env.rb文件: require ‘simplecov’ SimpleCov.start ‘rails’ require ‘cucumber/rails’ Capybara.default_selector = :css Capybara.javascript_driver = :webkit begin require ‘database_cleaner’ require ‘database_cleaner/cucumber’ DatabaseCleaner[:active_record].strategy = :transaction rescue NameError raise “You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it.” end Before do DatabaseCleaner.start end After […]

Capybara没有使用action_cable

我正在使用带有动作电缆的Rails 5 beta 3,这种集成在开发中运行良好,但是当我尝试通过capybara运行function测试时,它似乎没有达到通道操作。 我正在使用Portergeist并将puma配置为capybara的服务器。 我也在使用es5-shim和es6-shim。 有没有其他人经历过这个或知道任何解决方法? 谢谢! 编辑 我正在使用这个水豚分支来配置Capybara中的Puma Capybara.register_server :puma do |app, port, host| require ‘puma’ Puma::Server.new(app).tap do |s| s.add_tcp_listener host, port end.run.join end 我没有在config.action_cable.allowed_request_origins上设置任何内容

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

配置:使用RSpec,Capybara,Selemium驱动程序,SQLite数据库对Rails项目进行集成测试。 情况:我很少与Capybara和默认的rack_test驱动程序进行集成测试。 他们直接在数据库中创建用户注册(对于Devise gem)。 然后他们像用户一样使用Capybara DSL登录并测试场景。 问题:我尝试将驱动程序更改为Selenium以测试JavaScript代码。 现在测试失败,因为应用程序没有看到测试创建的用户注册。 调查:看起来Selenium驱动程序与转换的工作方式不同,因此在测试中所做的更改在Web应用程序中是不可见的。 可能的解决方案包括: config.use_transactional_fixtures = false DatabaseCleaner.strategy = :truncation

Capybara无法识别动态添加的DOM元素?

在使用Capybara和Selenium时,我似乎无法测试使用jQuery进行的光滑javascript操作。 预期的行为是当用户单击链接“添加资源”时动态生成表单。 Capybara将能够单击该链接,但无法识别新的表单元素(即“resource [name]”)。 有没有办法为Capybara重新加载DOM,或者我还没有学到这个gem的某些元素? 提前致谢! == ==编辑 目前我正在尝试与selenium的运气: wait_for_element 方法。 == ==编辑 在尝试执行以下操作时,我一直在为“nill类”获取“未定义的方法’wait_for_element`”: @selenium.wait_for_element 似乎那个特定的方法,或者也许是wait_for ,一个巨大的选择器访问我期望的DOM元素是正确的行动方案,但现在试图让selenium会话开始成为一个巨大的麻烦。

在尝试模拟按时,Capybara:NotSupportedByDriverError

我正在使用Capybara编写一个规范来测试我网站上搜索栏的function。 按照本页上有关如何模拟按Rspec / Capybara中的Enter键的说明操作后,运行测试时出现以下错误: Failure/Error: page.driver.execute_script(keypress) Capybara::NotSupportedByDriverError: Capybara::Driver::Base#execute_script 难道我做错了什么? 以下是我的spec文件的内容: require ‘spec_helper’ describe ‘Search’ do it ‘displays no results when non-existent things are looked up’ do visit root_path page.first(“.search-icon-small”).click fill_in “search”, with: “NonExistent” #simulate pressing Enter keypress =”var e = $.Event(‘keydown’, { keyCode: 13 }); $(‘body’).trigger(e);” page.driver.execute_script(keypress) page.should have_content(‘No Results’) end it ‘displays content that […]

检查Capybara的复选框

使用Capybara我不能为我的生活选择我的表格上的复选框。 在我的请求规范中,我尝试过: check(“First Name”) page.check(“First Name”) page.check(“pickem_option_ids_10”) find(:css, “#pickem_option_ids_11[value=’11’]”).set(true) find(:css, “#pickem_option_ids_11”).set(true) 我的表格片段: Options: First Name Middle Name 我从这个SO线程中得到了一些find()想法。 我在其他规格中取得了一些成功,我有一个标签为Active的复选框,我只是说check(“Active”) 。

RSpec和数据库清理程序 – 将某些对象永久保留在测试数据库中

我(姗姗来迟)开始使用RSpec / capybara测试我的Rails应用程序(购物网站),使用数据库清理程序清除数据库,并使用Factory Girl为每个测试生成新对象(像大多数人一样)。 这很好用,我认为清除测试之间的数据是个好主意。 但是,它可能会变慢并且(据我所知)生成同一对象的多个实例有点乏味。 在我的数据库中有一些对象总是相同的,或者我将始终为测试生成相同的副本。 例如,我的Package模型,它定义订阅包的定价和function限制。 它可能永远不会改变。 有没有办法,使用此配置(请注释并指定是否需要更多信息),将某些对象实例放入测试数据库并将其从数据库清理器中排除 ,或以任何其他方式保留特定对象的永久副本测试数据库? 这主要是为了提高测试速度。

fill_in如何在Rspec / Capybara中运作?

我正在关注Michael Hartl的Ruby on Rails教程。 当我使用rspec / capybara时,fill_in方法让我感到困惑。 我有以下视图代码: 这是我的测试代码: fill_in “Name”, with: “Example User” 看来,fill_in需要label和text_field才能找到输入字段。 如果我取消f.label或将更改为 ,测试将给出ElementNotFound错误。 任何人都可以解释fill_in如何在这里工作? fill_in方法是否都需要输入字段和标签?

如何在capybara中使用execute_script时返回值?

我在测试中有一个非常简单的行,调用这样的执行脚本: puts page.execute_script(“return somefunction();”).to_i.inspect 在javascript我有这样的function: function somefunction(){ console.log(“test”); return 999; } 来自控制台日志的“测试”正在注销,因此它正在运行… 在运行测试时查看日志,execute_script返回0而不是999,所以在rspec中我无法获取函数的返回值,如何使page.execute_script从该函数返回该值?