Ruby on rails Rails代码验证工作正常,但Rspec测试失败
有人知道Rspec出了什么问题吗?我对无效电子邮件的所有测试都失败了(也就是说,它们应该是无效的,但在Rspec中不知何故是无效的),但在实际代码中,它工作正常,不允许任何不好的电子邮件。验证甚至可以在我的控制台中工作 注二:Ruby on rails Rails代码验证工作正常,但Rspec测试失败,ruby-on-rails,validation,ruby-on-rails-4,rspec,rspec-rails,Ruby On Rails,Validation,Ruby On Rails 4,Rspec,Rspec Rails,有人知道Rspec出了什么问题吗?我对无效电子邮件的所有测试都失败了(也就是说,它们应该是无效的,但在Rspec中不知何故是无效的),但在实际代码中,它工作正常,不允许任何不好的电子邮件。验证甚至可以在我的控制台中工作 注二: 我意识到格式不理想。。。我们稍后会处理这个问题。这只是我一个人写的东西,还没有经历和弄干 我还意识到,有一种更简单的方法可以在模型中单独验证这些内容,但我需要非常定制的消息,而不需要任何属性的引用,而且我不喜欢我读到的那种需要执行的迂回方式 型号代码 validate :
validate :create_validation, on: :create
def create_validation
errors[:base] << "Please enter a valid email address to continue" if self.email.blank? || (( /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i =~ self.email) == nil)
end
#The RegEx is from Michael Hartl's tutorial
describe Signup do
before do
@signup = FactoryGirl.create(:signup)
end
subject { @signup }
describe "email tests" do
describe "invalid tests" do
# blank email
before { @signup.email = " " }
it { should_not be_valid }
# invalid format email
addresses = %w[user@foo..com, user@foo,com user_at_foo.org example.user@foo. foo@bar_baz.com foo@bar+baz.com]
addresses.each do |invalid_address|
before { @signup.email = invalid_address }
it { should_not be_valid }
end
end
end
end
规范帮助程序中的Factory girl代码
FactoryGirl.define do
factory :signup do |f|
f.email { Faker::Internet.email }
#... other attributes
end
结束据我所知,您只在创建时验证代码!但在测试中,您在before块中创建了对象,并将其保留在测试中,所以跳过验证 试试这个变体
describe Signup do
before do
@signup = FactoryGirl.build(:signup)
end
subject { @signup }
describe "email tests" do
describe "invalid tests" do
# blank email
before { @signup.email = " " }
it { should_not be_valid }
# invalid format email
addresses = %w[user@foo..com, user@foo,com user_at_foo.org example.user@foo. foo@bar_baz.com foo@bar+baz.com]
addresses.each do |invalid_address|
before { @signup.email = invalid_address }
it { should_not be_valid }
end
end
end
end
我希望对已生成但未保存的记录触发验证
PS或您可以在::create上删除选项