我的测试:

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/

10-13 05:22