我正在测试我的模块'RecipientMatcher'中的一个类。
在我所有的类前面都要不断地输入前缀名称“RecipientMatcher”是非常麻烦的。我想知道有没有更好的方法?
今天的代码:
ocr_text = 'Jim Baker & Co'
recipient_matches = [
RecipientMatcher::RecipientMatchFound.new(build(:group), RecipientMatcher::MatchObject.new(nil,'Jim'), ocr_text, ocr_text.match(/Jim/)),
RecipientMatcher::RecipientMatchFound.new(build(:group), RecipientMatcher::MatchObject.new(nil, 'Jim Baker & Co'), ocr_text, ocr_text.match(/Jim Baker & Co/)),
RecipientMatcher::RecipientMatchFound.new(build(:group), RecipientMatcher::MatchObject.new(nil, 'Jim Baker'), ocr_text, ocr_text.match(/Jim Baker/)),
]
section_meta_data = RecipientMatcher::PossibleRecipientsCalculator.determine_primary_recipients_in_section(recipient_matches)
primary_recipients = section_meta_data.primary_recipients
expect(true).to eq(true)
如果我能这样写就好了:
RecipientMatcher.magic_method do
ocr_text = 'Jim Baker & Co'
recipient_matches = [
::RecipientMatchFound.new(build(:group), ::MatchObject.new(nil,'Jim'), ocr_text, ocr_text.match(/Jim/)),
::RecipientMatchFound.new(build(:group), ::MatchObject.new(nil, 'Jim Baker & Co'), ocr_text, ocr_text.match(/Jim Baker & Co/)),
::RecipientMatchFound.new(build(:group), ::MatchObject.new(nil, 'Jim Baker'), ocr_text, ocr_text.match(/Jim Baker/)),
]
section_meta_data = ::PossibleRecipientsCalculator.determine_primary_recipients_in_section(recipient_matches)
primary_recipients = section_meta_data.primary_recipients
expect(true).to eq(true)
end
5条答案
按热度按时间xu3bshqb1#
您可以使用RSpec的described_class,只要您提供类别做为主要
describe
区块的参数即可,如下所示:或者,您可以为类定义一个变量(或RSpec中的
let
),例如:j2qf4p5b2#
长期以来,我只是说把它写出来。打字多一点,但阅读起来很容易。
话虽如此,我的建议是:
方法1:通过将模块赋给一个变量来缩短它
或者甚至进一步细化到单个嵌套类
方法2:为每个常用的段将构造 Package 在一个helper方法中
或循环
332nm8kg3#
您可以随时创建别名,非常简单:
尽管需要进行更多的重构,但您可以通过应用名为 Don't Repeat Yourself 或DRY的久经考验的方法来真正地简化它:
试着从数据转换的Angular 来考虑Ruby程序,你通常可以从一些简单的东西开始,比如这个名字数组,然后一步一步地构建出你想要的结构。
wb1gzix04#
只是一个想法。而不是
您可以使用
其中它被定义为RSec辅助器:
c3frrgcw5#
我今天在尝试解决同样的问题时遇到了这个问题(使用
ruby
2.7.2和rspec
v3.6.0)。我有一个带有Foo::Bar
模块的gem,其中定义了gem的所有类,我不想在我的所有规范中输入Foo::Bar::
前缀。我尝试编辑spec_helper.rb:
但没有成功。
最后,添加
至
spec_helper.rb
* 以上 *块允许我引用不带前缀的类,例如:
而不是