在一个简单的rails应用程序与企业模型轨,RSpec的,早该validate_presence_of失败,二传手叫了两声
class Company < ActiveRecord::Base
# Attributes
attr_accessible :name
validates_presence_of :name
def name=(s)
self[:name] = s.upcase
end
end
当以下规范文件运行。它失败。
require 'spec_helper'
describe Company do
before :each do
@company = Company.new({name: 'my_company'})
end
it "should validate presence of name" do
@company.should validate_presence_of(:name)
end
end
调试表明,名字=(一个或多个)方法被调用两次,一次以“my_company”次,用零。
我不明白为什么第二次电话会与nill发生。 这里使用的宝石:
gem 'rails', '3.2.13'
gem 'mysql2'
group :development, :test do
gem 'rspec-rails', '2.11.0'
gem 'shoulda-matchers', :require => false
end
关于你的2.你从哪里得到这些信息?“应该出现验证器试图为所有属性分配零值”。我仍然不明白为什么该方法被调用两次。第一个调用名称作为一个值,第二个调用它为null。 – Alpha 2013-04-24 03:34:24
@alpha,我经历了shoulda ** validate_presence_of_matcher **的代码。有一个方法**匹配**,它在内部调用** disallows_value_of(blank_value,@expected_message)**。如果你遵循这个代码,你会看到在**匹配中没有值的任务** ** AllowValueMatcher的方法 – rajashree 2013-04-24 05:22:26