我的测试:
RSpec.describe Populators::Fipe::Brand, type: :service do
before(:all) do
::Populators::Fipe::Brand.new.perform
end
it "update records and do not create new ones" do
expect{
::Populators::Fipe::Brand.new.perform
}.to_not change{
::Brand.maximum(:id)
}
end
end
当我跑步时:
RSPEC规范
结果:
失败/错误::填充者::fipe::brand.new.perform
命名错误:
未定义的方法
当我跑步时:
RSPEC规范/服务/填充器/FIPE/BRAND U SPEC.RB
结果:
Populators::Fipe::Brand
更新记录,不创建新记录
创建表
填充名称
填充组合代码
在1.04秒内完成(文件加载耗时6.33秒)
4例,0次失败
编辑:
我有两个班:
型号/品牌.rb
服务/populators/fipe/brand.rb
代码试图做什么:
当populators::fipe::brand(服务)执行其操作时,
它使用来自web服务的数据填充品牌(模型)。
但是如果品牌(模型)已经存在,它只会更新。
RSPEC正在做什么:
但似乎rspec试图在“models/brand.rb”中调用方法“perform”
而不是正确的“services/populators/fipe/brand.rb”。
不知道为什么…
最佳答案
首先,可以将::Populators::Fipe::Brand
替换为described_class
,其次,::
意味着强制尽可能多的上下文您的错误只是说Brand
类没有任何方法,我认为您在这里要写的是::Populators::Fipe::Brand
而不是::Brand
。尝试将代码更改为
RSpec.describe Populators::Fipe::Brand, type: :service do
before(:all) do
described_class.new.perform
end
it "update records and do not create new ones" do
expect{
described_class.new.perform
}.to_not change{
described_class.maximum(:id)
}
end
end
关于ruby-on-rails - 从“rspec spec”和rspec“spec/services/my/module”运行rspec时模块的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31314357/