Rspec 如何用FactoryGirl替换临时文件?
我正在用rspec测试CSV上传程序,我在/spec/fixtures中保存了一个测试文件,我用fixture\u file\u upload将该文件拉入测试:Rspec 如何用FactoryGirl替换临时文件?,rspec,factory-bot,fixture,Rspec,Factory Bot,Fixture,我正在用rspec测试CSV上传程序,我在/spec/fixtures中保存了一个测试文件,我用fixture\u file\u upload将该文件拉入测试: let(:file) do fixture_file_upload( Rails.root.join("spec/fixtures/chargeback_test.csv"), "text/csv" ) end 这是可行的,但我在每个规范中都有文件路径。我想通过将其放入工厂来干燥我的代码,但我很难让Factor
let(:file) do
fixture_file_upload(
Rails.root.join("spec/fixtures/chargeback_test.csv"),
"text/csv"
)
end
这是可行的,但我在每个规范中都有文件路径。我想通过将其放入工厂来干燥我的代码,但我很难让FactoryGirl明白我想要从FactoryGirl.create(:chargeback\u csv)
返回临时文件
我猜工厂应该是这样的:
include ActionDispatch::TestProcess
FactoryGirl.define do
factory :chargeback_csv, :class => "Tempfile" do
ignore do
path { Rails.root.join("spec/fixtures/chargeback_test.csv") }
mime_type { "text/csv" }
binary { false }
end
initialize_with { fixture_file_upload(path, mime_type, binary) }
end
end
但是,在我的规格中使用此选项会导致以下错误:
Failure/Error: let(:file) { FactoryGirl.create(:chargeback_csv) }
NoMethodError:
undefined method `save!' for #<Tempfile:0x112fec730>
退房。我现在需要运行,但如果您还没有弄明白,我会在几个小时内根据您的具体情况更新此答案。我认为
初始化
看起来很有希望。我仍然有这个问题,所以任何额外的帮助将不胜感激。我要用我正在尝试的最新工厂和我得到的错误更新我的问题。明白了:)关于保存的错误代码>正在发生,因为to_create()
调用save工厂创建的对象上的代码>。FactoryGirl的较新版本有跳过创建
来处理这个问题,但我必须将创建
定义为一个空块,以便与我的版本一起使用。令人印象深刻的调查工作!你怎么知道的?此外,我对共享链接的阅读表明,您不需要使用忽略块,因为您正在引用初始化\u块中的所有参数。你的方式可能更清晰,但我只是好奇你是否这样理解并想尝试一下。
include ActionDispatch::TestProcess
FactoryGirl.define do
factory :chargeback_csv, :class => "Tempfile" do
to_create {}
ignore do
path { Rails.root.join("spec/fixtures/chargeback_test.csv") }
mime_type { "text/csv" }
binary { false }
end
initialize_with { fixture_file_upload(path, mime_type, binary) }
end
end