我有一个应用程序启用/禁用按钮以响应UI中发生的事情.
我可以轻松地使用水豚来检测按钮是否存在
should have_button 'save'
Run Code Online (Sandbox Code Playgroud)
但我不知道如何验证保存按钮的状态.那是:
我怎样写一个水豚断言检查按钮的存在和它的启用或禁用状态?
我已经一起检查了一个禁用按钮的检查; 对于启用,我想我可以验证是否有匹配的按钮,并且没有匹配的禁用按钮.但至少可以说,这是笨重的.
这似乎是一个基本的UI检查,我相信我已经错过了一些东西,但我似乎无法弄清楚是什么.
根据gregates的回答跟进:
正如我在评论中提到的,Capybara行为取决于潜在的驱动因素.我们正在使用webkit,它返回"true"/"false"字符串结果.显然,其他驱动程序返回true/false.Capybara的人都知道这个问题(github.com/jnicklas/capybara/issues/705),但他们觉得(可能是正确的)解决它并不是他们的问题.
我没有让我的测试依赖于我正在使用的驱动程序,而是最终创建了一个自定义匹配器:
RSpec::Matchers.define :be_enabled do
match do |actual|
driver_result = actual[:disabled]
# nil, false, or "false" will all satisfy this matcher
(driver_result.nil? || driver_result == false || driver_result == "false").should be_true
end
end
RSpec::Matchers.define :be_disabled do
match do |actual|
driver_result = actual[:disabled]
(driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以输入:
user_license_area.find_button('Save').should be_disabled
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在Ruby中"映射"单个项目的方法.
我想调用这个函数并传递一个块,该对象将被生成块,然后块的结果将返回给调用者.究竟是什么地图,但对于单个元素.
动机是有时你会生成仅用于构造其他东西的对象.然后不再需要原始对象.将转换放入块中并消除临时值会很好.
作为一个人为的例子,让我们假设我想创建一个表示月/年组合的整数.对于今天的日期,代码看起来像:
day = Date.today
month_number = day.year * 100 + day.month
Run Code Online (Sandbox Code Playgroud)
如果我可以这样做,我真的很喜欢它:
month_number = Date.today.some_function { |d| d.year * 100 + d.month }
Run Code Online (Sandbox Code Playgroud)
但我不知道'some_function'是什么(或者它是否存在).
如果有更多的Ruby方式来处理这样的事情,我会全神贯注.我知道猴子修补类,但我希望处理那些更短暂的情况.
我最近开始使用Java(我最近的经验大部分是在.NET中).作为这项工作的一部分,我一直在做Jetty和Tomcat之间的比较.
我认为在我们的环境中有用的Tomcat的一个特性是内置管理控制台,允许管理员部署/取消部署/重启/等部署到服务器的各种应用程序.
Jetty是否有类似的功能?如果没有,是否有一种管理应用程序服务器的首选方法?
感谢您的输入.
我正在 M1 mac 上构建一个 Linux docker 镜像(如果有的话,可以从 ruby:3.0.2-alpine3.12 开始)。
当我尝试在容器中执行捆绑执行时,ruby 抱怨它无法加载 nokogiri。如果我只是启动 ruby 并尝试要求 nokogiri 我会得到相同的结果:
bash-5.0# irb
irb(main):001:0> require 'nokogiri'
<internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- nokogiri (LoadError)
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from (irb):1:in `<main>'
from /usr/local/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
from /usr/local/bin/irb:23:in `load'
from /usr/local/bin/irb:23:in `<main>'
Run Code Online (Sandbox Code Playgroud)
宝石已安装
ls -la /app/vendor/bundle/ruby/3.0.0/gems/
<snip>
drwxr-xr-x 6 root root 4096 Feb 2 22:43 nokogiri-1.13.1-aarch64-linux
<snip
Run Code Online (Sandbox Code Playgroud)
一件有点奇怪的事情是
bash-5.0# ruby --version
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [aarch64-linux-musl]
Run Code Online (Sandbox Code Playgroud)
我不认为 musl 平台导致了不匹配。我们的生产机器是 amd64,并且存在类似的 amd64/amd64-musl 不匹配问题,但它们可以正确运行容器。
有办法让它发挥作用吗?
我已经能够通过在捆绑时禁用预编译 …
我们的团队对基于JVM的开发有些新意.我们正在开发由许多其他库组成的应用程序.
我们发现Play框架对于开发Web应用程序非常有吸引力.框架很棒,但我们本地开发的库的依赖管理有些令人烦恼.我们正在使用Play 2.0的RC2,虽然我们能够对加载到Play中的库进行更改,但这绝对是一个尴尬的过程,会中断正常流畅的Play过程.
我们正在做的是将我们的库推送到我们的本地(在每个开发人员的机器上)Maven存储库,然后将这些相同的库导回到Play项目中.它有效,但正如我所说,它很尴尬.
我们应该采用哪种最佳实践来使这项工作更顺利?
FWIW,我们正在使用IntelliJ 11.0(旗舰版)
============ ============编辑
关于如何改进我的Maven构建过程,我得到了很好的答案,我确实很感激.但是,这不是我正在寻找的答案.
为了使这个具体,假设我正在构建服务和Web应用程序来监视/管理服务.该服务是一个普通的Java/Scala项目,Web App是一个Play!项目.我们称之为"服务"和"应用".(请不要挑剔这个提议的结构,我为了问题的目的简化它)
在Eclipse或IntelliJ中,我可以添加'Service'模块(或Project for Eclipse)作为'App'项目的依赖项.这允许在"服务"库中进行更改时非常快的开发人员周转时间(例如,我向模型添加属性).重新编译和运行比编译,打包,部署,导入和重新加载浏览器快几个数量级.
根据我对Play 2.0和SBT文档的阅读,我唯一真正的答案是让"服务"成为"App"的子项目.这有更好的答案吗?