Ruby on rails 为什么RSpec抛出InvalidSignature错误?

Ruby on rails 为什么RSpec抛出InvalidSignature错误?,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我是Ruby、Rails和TDD的新手,在代码测试中遇到了麻烦。 我试图测试一个配方模型的创建,该模型由一个使用FactoryBot创建的用户发布 我的配方模型(app/models/Recipe.rb)是: 此测试失败,错误为: Failures: 1) Recipe Creating a Recipe should be permitted Failure/Error: expect(recipe).to be_valid ActiveSupport::MessageVerifier

我是Ruby、Rails和TDD的新手,在代码测试中遇到了麻烦。 我试图测试一个配方模型的创建,该模型由一个使用FactoryBot创建的用户发布

我的配方模型(app/models/Recipe.rb)是:

此测试失败,错误为:

Failures:

1) Recipe Creating a Recipe should be permitted
 Failure/Error: expect(recipe).to be_valid

 ActiveSupport::MessageVerifier::InvalidSignature:
   ActiveSupport::MessageVerifier::InvalidSignature
 # ./spec/models/recipe_spec.rb:16:in `block (3 levels) in <top (required)>'

 Finished in 0.35273 seconds (files took 7.93 seconds to load)
 7 examples, 1 failure

 Failed examples:

 rspec ./spec/models/recipe_spec.rb:5 # Recipe Creating a Recipe should be permitted
故障:
1) 配方应允许创建配方
失败/错误:预期(配方)。有效
ActiveSupport::MessageVerifier::InvalidSignature:
ActiveSupport::MessageVerifier::InvalidSignature
#./spec/models/recipe_spec.rb:16:in'block(3层)in'
完成时间为0.35273秒(文件加载时间为7.93秒)
7例,1例失败
失败的示例:
rspec./spec/models/recipe_spec.rb:5#应允许创建配方
为什么会出现这个错误?它意味着什么

recipe = Recipe.new(title: 'Recipe', 
                          preparazione: 'Preparation',
                          image: Rack::Test::UploadedFile.new('spec/support/test_image.jpg', 'image/jpg')), 
                          user_id: @user.id,
                          n_likes: 0,
                          n_comments: 0,
                          created_at: Time.now.utc)
在Rspec中使用上载附件


在Rspec中使用上载附件。

向我们显示
配方
模型类代码,请
expect(配方)。要有效
调用方法:
valid?
on
配方
。反过来,它将运行您在模型上定义的任何rails验证。因此,您代码中的某些内容(您没有向我们展示)将引发该异常作为验证流程的一部分。在
app/models/recipe.rb
中有什么内容?您定义了哪些验证?特别是,引用
ActiveSupport::MessageVerifier
的代码在哪里?看起来相关:对,如果我删除模型中图像的验证,测试成功。但是,我仍然希望有所需的图像。我可以在RSpec测试中上传图像吗?请向我们展示
配方
模型类代码,请
expect(配方)。要有效
调用方法:
valid?
on
配方
。反过来,它将运行您在模型上定义的任何rails验证。因此,您代码中的某些内容(您没有向我们展示)将引发该异常作为验证流程的一部分。在
app/models/recipe.rb
中有什么内容?您定义了哪些验证?特别是,引用
ActiveSupport::MessageVerifier
的代码在哪里?看起来相关:对,如果我删除模型中图像的验证,测试成功。但是,我仍然希望有所需的图像。我可以在RSpec测试中上传一个图像吗?它与
image:Rack::test::UploadedFile.new(Rails.root.join('spec/support/test\u image.jpg'),'image/jpg')一起工作。
谢谢!更新了答案
Rack::Test::UploadedFile.new('spec/support/Test_image.jpg','image/jpg'))
这也应该可以。它与
image:Rack::Test::UploadedFile.new(Rails.root.join('spec/support/Test_image.jpg'),'image/jpg')一起工作。
谢谢!更新了答案
Rack::Test::UploadedFile.new('spec/support/Test_image.jpg','image/jpg'))
Failures:

1) Recipe Creating a Recipe should be permitted
 Failure/Error: expect(recipe).to be_valid

 ActiveSupport::MessageVerifier::InvalidSignature:
   ActiveSupport::MessageVerifier::InvalidSignature
 # ./spec/models/recipe_spec.rb:16:in `block (3 levels) in <top (required)>'

 Finished in 0.35273 seconds (files took 7.93 seconds to load)
 7 examples, 1 failure

 Failed examples:

 rspec ./spec/models/recipe_spec.rb:5 # Recipe Creating a Recipe should be permitted
recipe = Recipe.new(title: 'Recipe', 
                          preparazione: 'Preparation',
                          image: Rack::Test::UploadedFile.new('spec/support/test_image.jpg', 'image/jpg')), 
                          user_id: @user.id,
                          n_likes: 0,
                          n_comments: 0,
                          created_at: Time.now.utc)