gpt4 book ai didi

ruby-on-rails - 从 "rspec spec"和 rspec "spec/services/my/module"运行 rspec 时模块的差异

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:40 25 4
gpt4 key购买 nike

我的测试:

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 规范

结果:

失败/错误:::Populators::Fipe::Brand.new.perform 没有方法错误: 未定义的方法 perform' for #<Brand:0x007fdcb6fb2788>
# ./spec/services/populators/fipe/brand_spec.rb:5:in
'

中的 block (2 级)

当我运行时:

rspec 规范/services/populators/fipe/brand_spec.rb

结果:

Populators::Fipe::品牌 更新记录,不要创建新记录 创建表 填写姓名 填充组合代码

在 1.04 秒内完成(文件加载时间为 6.33 秒)4个例子,0个失败

已编辑:

我有两个类:

模型/品牌.rb

services/populators/fipe/brand.rb

代码试图做什么:

当 Populators::Fipe::Brand(服务)执行其操作时,它使用来自网络服务的数据填充品牌(模型)。但如果品牌(型号)已经存在,它只会更新。

rspec 在做什么:

但是 rspec 似乎试图调用“models/brand.rb”中的方法“perform”而不是正确的“services/populators/fipe/brand.rb”。不知道为什么..

最佳答案

首先,您可以将 ::Populators::Fipe::Brand 替换为 described_class,其次 :: 意味着尽可能强制使用最高上下文.你的错误只是说 Brand 类没有一些方法,我认为你在这里写的是 ::Populators::Fipe::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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com