gpt4 book ai didi

ruby-on-rails - Rails 3 : Duplicate validation error messages during testing

转载 作者:行者123 更新时间:2023-12-04 03:54:11 24 4
gpt4 key购买 nike

我收到一些奇怪的验证行为:它正在复制验证错误消息,并且我无法弄清楚是什么原因导致的……它在Rails控制台中没有执行此操作。

这是来自我的Phone模型的验证:

# phone.rb
validates :number, :length => { :minimum => 3 }

我的规范:
require 'spec_helper'

describe Phone do
it "requires a number" do
user = User.make!
@p = Phone.new(number:nil,user_id:user.id,type:2)
@p.valid?
puts @p.errors.inspect
@p.should have(1).error_on(:number)
end

我的测试结果:
# rspec and machinist
#<ActiveModel::Errors:0x000000036f1258 @base=#<Phone id: nil, user_id: 614, kind: nil, number: nil, created_at: nil, updated_at: nil>, @messages={:number=>["is too short (minimum is 3 characters)", "is too short (minimum is 3 characters)"]}>
F

Failures:

1) Phone requires a number
Failure/Error: @p.should have(1).error_on(:number)
expected 1 error on :number, got 2
# ./spec/models/phone_spec.rb:11:in `block (2 levels) in <top (required)>'

Finished in 0.50988 seconds
1 example, 1 failure

如您所见,我两次都“太短了(最少3个字符)” ...在测试过程中,它也是/only/发生的。
有任何想法吗?

谢谢!

最佳答案

问题出在行中:

Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }

在spec_helper.rb文件中的Spork.each_run块中

如果将方法“加载”更改为“需要”,则可以解决此问题。

或者,如果您的Spork版本足够新,则可以完全删除该行。
我很确定该错误是由于有人使用旧指令安装较新版本的Spork(0.9.0+)而引起的,因为该行:
Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }

甚至不必在spec_helper.rb文件中明确声明。如果是这种情况,则在spec_helper.rb文件中使用load方法时,它将重新加载指定的文件,这很可能是奇怪的RSpec重复验证错误的原因。

关于ruby-on-rails - Rails 3 : Duplicate validation error messages during testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533889/

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