小编Dan*_*arp的帖子

如何在rspec中测试方法调用的顺序?

我有一个使用命令模式的类按顺序执行一系列简单的转换步骤.数据作为数据馈送(以XML格式)传入,然后使用单一用途的步骤类通过多个步骤进行转换.所以它可能看起来像这样(实际的类名不同):

raw_data = Downloader.new(feed)
parsed_data = Parser.new(raw_data)
translated_data = Translator.new(parsed_data)
sifted_data = Sifter.new(translated_data)
collate_data = Collator.new(sifted_data)
Run Code Online (Sandbox Code Playgroud)

等等

我有每个类的单元测试,我有集成测试来验证完整的流程,包括调用每个类.

但我没有办法测试他们被称为的顺序

我想要一些测试,所以我可以知道:首先调用Downloader,然后是Parser,然后是Translator等.

这是Ruby与Rspec 3.

我确实找到了这个:http://testpractices.blogspot.com/2008/07/ordered-method-testing-with-rspec.html但这是从2008年开始,它也非常难看.有没有更好的方法来测试方法执行顺序?

谢谢!

ruby testing rspec

13
推荐指数
1
解决办法
5712
查看次数

如何为仅支持Ruby的项目向i18n添加可用的语言环境?

我正在开发一个仅使用Mongoid进行持久化的Ruby项目(不是Ruby on Rails).Mongoid通过本地化字段支持使用I18n进行语言翻译:http://mongoid.org/en/mongoid/docs/documents.html#localized_fields

但是,我无法弄清楚如何添加其他语言环境作为配置选项.I18n.available_locales仅报告:en

我所做的所有搜索都显示了如何在Rails的上下文中配置和使用I18n.任何人都可以帮助我如何配置I18n并添加其他语言环境,以便我可以为Mongoid文档设置本地化字段值.

谢谢!

ruby internationalization

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

Ruby应用程序的多个环境

我一直在写Rails应用程序很长时间以至于我突然遇到了Rails:环境下免费获得的东西.

也就是说,您可以在本地运行Rails应用程序,默认情况下,RAILS_ENV(或Rails.env)是"开发".如果您正在运行规范/测试,那么它就是"测试",当您部署到生产服务器时,您将其设置为"生产".

当您有配置文件时,这特别有用.对于Gemfile来说也可用于区分某些环境的gem.

现在我的问题是:我正在编写一个纯Ruby应用程序而且我不知道设置它的最佳方式,以便我仍然可以拥有多个环境?我想为第三方服务(如MongoLab/Iron.IO /等)设置配置文件,但我希望它们设置为"开发","测试","生产"等.然后我想成为能够从各种环境运行应用程序.

我知道我可以通过命令行环境变量手动处理它,但我想知道是否有最佳(更好?)的做法?有没有帮助这个的宝石?或者有关如何为纯Ruby应用程序构建环境处理的任何建议?

谢谢,

ruby configuration ruby-on-rails environment-variables

10
推荐指数
1
解决办法
1837
查看次数

如何在 FactoryBot 中设置不是外键的 _id 值?

我正在使用 FactoryBot(以前称为 FactoryGirl)为我的测试创建一些工厂数据。我有一个通过模式看起来像这样的模型(精简为相关内容):

create_table "items", force: :cascade do |t|
    t.text "team"
    t.text "feature_id"
    t.text "feature"
    t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

但是,feature_id并且feature不是对特征对象的引用……它们只是字符串。

我这样定义我的工厂:

FactoryBot.define do
  factory :item do
    team "TheTeam"
    sequence(:feature_id) {|n| "Feature#{n}" }
    feature { Faker::Lorem.sentence }
  end
end
Run Code Online (Sandbox Code Playgroud)

简单的案例有效:

> FactoryBot.create(:item)
=> #<Item:0x007fad8cbfc048
 id: 1,
 team: "TheTeam",
 feature_id: "Feature1",
 feature: "Qui voluptatem animi et rerum et.",
 created_at: Wed, 10 Jan 2018 02:40:01 UTC +00:00,
 updated_at: Wed, 10 Jan 2018 02:40:01 UTC +00:00>
Run Code Online (Sandbox Code Playgroud)

但是当我想指定我自己feature_id的时,就会发生这种情况:

> FactoryBot.create(:item, feature_id: …
Run Code Online (Sandbox Code Playgroud)

ruby factory rspec ruby-on-rails factory-bot

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

如何向 Rails 中的功能规范添加请求方法?

我有一个简单的测试功能,称为test_feature_spec.rb

(这只是为了解决这个问题......实际规格要长得多,实际功能规格)

require "features_helper"

RSpec.feature "Simple Feature", type: :feature do
  scenario "a test scenario" do
    get "/"
  end
end
Run Code Online (Sandbox Code Playgroud)

我可以做各种 Rails-y 的事情,包括水豚驱动的事情(比如visit such_n_such_path)。然而上面的崩溃:

Failures:

  1) Simple Feature a test scenario
     Failure/Error: get "/"

     NoMethodError:
       undefined method `get' for #<RSpec::ExampleGroups::SimpleFeature:0x000000011a799788>
       Did you mean?  gets
                      gem
Run Code Online (Sandbox Code Playgroud)

如果我只是将其更改为type: :feature它就type: :request可以正常工作:

> rspec spec/features/test_feature_spec.rb
.

Finished in 0.64913 seconds (files took 5.82 seconds to load)
1 example, 0 failures
Run Code Online (Sandbox Code Playgroud)

似乎使用type=> Rails 或 Rspec 加载一些东西以允许调用控制器路由,但使用=> …

rspec ruby-on-rails

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

通过补丁添加时,有没有办法在 git 中添加未跟踪的文件?

所以我正在学习的乐趣git add -p。我曾经使用 Sourcetree 或类似的 GUI 工具来检查更改,作为 的一部分git add,但现在我在命令行上使用它变得更好。

但是,令我感到沮丧的是,我无法在同一命令中添加未跟踪的文件。如果有像这样的选项,我希望git add -p --include-untracked它可以像其他部分一样将它们视为补丁。

有没有更好的方法可以通过单个命令来完成此操作?

git patch git-untracked

4
推荐指数
1
解决办法
1695
查看次数

How do I group by count of a field in InfluxDB?

I have some data in InfluxDB that is connected events for certain TCP connections. So the measurement is connection_events with tags being: mac_address of connecting system, and some other metadata. The value is just connected=true|false

What I want to do is something like this:

select count(mac_address), mac_address 
from connection_events 
where count(mac_address) > X 
group by mac_address
Run Code Online (Sandbox Code Playgroud)

In other words, I want to see results like:

28,ABCD

14,EFGH

3,XYZQ

However, InfluxDB doesn't like this kind of query. I can't figure out …

influxdb

3
推荐指数
1
解决办法
9944
查看次数

将数组转换为键匹配值的哈希

如果我有以下数组:

foo = ['a', 'b', 'c', 'd', 'e']
Run Code Online (Sandbox Code Playgroud)

Ruby 中是否有一种简单的方法可以将其转换为如下所示的哈希:

{ 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', 'e' => 'e' }
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

Hash[foo.map{|a| [a, a]}]
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但我很好奇是否还有其他方法。

ruby

0
推荐指数
1
解决办法
70
查看次数