小编And*_*vis的帖子

如何编写一个Capybara断言来检查是否存在按钮及其启用或禁用状态?

我有一个应用程序启用/禁用按钮以响应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-on-rails capybara

33
推荐指数
2
解决办法
3万
查看次数

单个对象的Ruby map()

我正在寻找一种在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方式来处理这样的事情,我会全神贯注.我知道猴子修补类,但我希望处理那些更短暂的情况.

ruby map

13
推荐指数
3
解决办法
3877
查看次数

是否有Jetty的应用程序管理控制台?

我最近开始使用Java(我最近的经验大部分是在.NET中).作为这项工作的一部分,我一直在做Jetty和Tomcat之间的比较.

我认为在我们的环境中有用的Tomcat的一个特性是内置管理控制台,允许管理员部署/取消部署/重启/等部署到服务器的各种应用程序.

Jetty是否有类似的功能?如果没有,是否有一种管理应用程序服务器的首选方法?

感谢您的输入.

jetty

11
推荐指数
1
解决办法
6255
查看次数

无法在 M1 Mac 上的 docker 容器中加载 nokogiri

我正在 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 不匹配问题,但它们可以正确运行容器。

有办法让它发挥作用吗?

解决方法

我已经能够通过在捆绑时禁用预编译 …

rubygems nokogiri apple-m1

11
推荐指数
1
解决办法
5991
查看次数

使用Play 2.0应用程序进行依赖关系管理

我们的团队对基于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"的子项目.这有更好的答案吗?

playframework-2.0

5
推荐指数
1
解决办法
2166
查看次数