我有一个使用命令模式的类按顺序执行一系列简单的转换步骤.数据作为数据馈送(以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年开始,它也非常难看.有没有更好的方法来测试方法执行顺序?
谢谢!
我正在开发一个仅使用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文档设置本地化字段值.
谢谢!
我一直在写Rails应用程序很长时间以至于我突然遇到了Rails:环境下免费获得的东西.
也就是说,您可以在本地运行Rails应用程序,默认情况下,RAILS_ENV(或Rails.env)是"开发".如果您正在运行规范/测试,那么它就是"测试",当您部署到生产服务器时,您将其设置为"生产".
当您有配置文件时,这特别有用.对于Gemfile来说也可用于区分某些环境的gem.
现在我的问题是:我正在编写一个纯Ruby应用程序而且我不知道设置它的最佳方式,以便我仍然可以拥有多个环境?我想为第三方服务(如MongoLab/Iron.IO /等)设置配置文件,但我希望它们设置为"开发","测试","生产"等.然后我想成为能够从各种环境运行应用程序.
我知道我可以通过命令行环境变量手动处理它,但我想知道是否有最佳(更好?)的做法?有没有帮助这个的宝石?或者有关如何为纯Ruby应用程序构建环境处理的任何建议?
谢谢,
我正在使用 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) 我有一个简单的测试功能,称为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 加载一些东西以允许调用控制器路由,但使用=> …
所以我正在学习的乐趣git add -p。我曾经使用 Sourcetree 或类似的 GUI 工具来检查更改,作为 的一部分git add,但现在我在命令行上使用它变得更好。
但是,令我感到沮丧的是,我无法在同一命令中添加未跟踪的文件。如果有像这样的选项,我希望git add -p --include-untracked它可以像其他部分一样将它们视为补丁。
有没有更好的方法可以通过单个命令来完成此操作?
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 …
如果我有以下数组:
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)
这工作得很好,但我很好奇是否还有其他方法。