如何在模型测试中访问fixture_file_upload辅助方法?
如何在非集成测试中使用
fixture_file_upload方法 fixture_file_upload是Rails框架封装在ActionDispatch::TestProcess模块里的测试辅助方法,默认只会在继承ActionDispatch::IntegrationTest的集成测试类中自动加载,模型测试、单元测试默认没有引入这个模块,手动引入即可使用,不需要额外配置其他依赖。
具体操作
- Minitest(Rails默认测试框架)场景
只需要在你要用到这个方法的模型测试类中,手动引入ActionDispatch::TestProcess模块即可:# 模型测试文件示例:test/models/your_attachment_model_test.rb class YourAttachmentModelTest < ActiveSupport::TestCase # 引入模块即可获得方法访问权限 include ActionDispatch::TestProcess test "can attach file with active storage" do # 传入的文件路径默认相对于 test/fixtures/files 目录 test_file = fixture_file_upload("sample.pdf", "application/pdf") record = YourAttachmentModel.new record.file.attach(test_file) assert record.file.attached? end end注意:不建议为了省事直接在
test_helper.rb里全局引入这个模块,模块内自带的部分HTTP请求相关辅助方法可能和单元测试的原有方法产生命名冲突,哪个测试文件要用就在对应类里单独引入即可。 - RSpec场景
如果项目用RSpec写测试,在spec/rails_helper.rb的配置块里引入模块即可:
配置完成后,任意层级的spec文件里都可以直接调用RSpec.configure do |config| config.include ActionDispatch::TestProcess # 可以顺便指定fixture文件的根目录,避免路径报错 config.fixture_path = Rails.root.join("spec/fixtures") endfixture_file_upload方法。
使用小提示:提前把测试要用到的样例文件放到对应fixture目录下(默认Minitest是test/fixtures/files,RSpec按你上面配置的路径放),调用时直接传文件名和对应MIME类型即可,不需要写完整磁盘路径。
内容的提问来源于stack exchange,提问作者David Morales
相关产品推荐
相关产品推荐

