what tutorial rails docs ruby-on-rails ruby-on-rails-4 rspec capybara

ruby on rails - tutorial - método undefined `validate_presence_of ''para RSpec:: ExampleGroups:: User:: Validations



selenium rails (2)

Agrega rspec-rails y shoulda-matchers en tu Gemfile :

group :development, :test do gem ''rspec-rails'', ''~> 3.4'', ''>= 3.4.2'' gem ''shoulda-matchers'', ''~> 3.1'', ''>= 3.1.1'' end

Establezca su spec/rails_helper.rb para usar rspec-rails y shoulda-matchers :

require ''rspec/rails'' require ''shoulda/matchers''

Y agregue su spec/spec_helper.rb :

Shoulda::Matchers.configure do |config| config.integrate do |with| with.test_framework :rspec with.library :rails end end

Estoy intentando pasar mis especificaciones del modelo para la validación pero no puedo hacer que pasen. He colocado todas las reglas de validación en mi archivo de modelo también

app / model / user.rb

class User < ActiveRecord::Base has_many :friendships has_many :friends, :through => :friendships has_many :plans has_many :memberships, class_name: "PlanMemebership" has_many :notes has_many :replies, class_name: "NoteReply" has_many :upvotes, class_name: "NoteUpvote" validates :first_name, presence: true validates :last_name, presence: true validates :email, presence: true validates :facebook_user_id, presence: true, uniqueness: true validates :facebook_user_token, presence: true, uniqueness: true validates :token, presence: true, uniqueness: true validates :birthday, presence: true validates :gender, presence: true def name first_name + " " + last_name end end

especificaciones / modelos / user_spec.rb

require ''rails_helper'' describe User, :type => :model do context "valid Factory" do it "has a valid factory" do expect(FactoryGirl.build(:user)).to be_valid end end context "validations" do it { should validate_presence_of :first_name } it { should validate_presence_of :last_name } it { should validate_presence_of :email } it { should validate_presence_of :birthday } it { should validate_presence_of :gender } it { should validate_presence_of :facebook_user_id } it { should validate_presence_of :facebook_user_token } context "uniqueness" do before { create(:user) } it { should validate_uniqueness_of :facebook_user_id } it { should validate_uniqueness_of :facebook_user_token } it { should validate_uniqueness_of :token } end end end

spec / factories / users.rb

FactoryGirl.define do sequence(:facebook_id) { |n| "#{n}1004453333331" } sequence(:facebook_user_token) { |n| "#{n}CAA" + ("X" * 216) } factory :user do first_name "Ralph" last_name "Robot" email "[email protected]" facebook_user_id { generate(:facebook_id) } facebook_user_token birthday { Date.current } gender "Male" token { Token.new.generate } end end

Salida de prueba

Token #generate returns a 20-byte token User valid Factory has a valid factory validations example at ./spec/models/user_spec.rb:13 (FAILED - 1) example at ./spec/models/user_spec.rb:14 (FAILED - 2) example at ./spec/models/user_spec.rb:15 (FAILED - 3) example at ./spec/models/user_spec.rb:16 (FAILED - 4) example at ./spec/models/user_spec.rb:17 (FAILED - 5) example at ./spec/models/user_spec.rb:18 (FAILED - 6) example at ./spec/models/user_spec.rb:19 (FAILED - 7) uniqueness example at ./spec/models/user_spec.rb:23 (FAILED - 8) example at ./spec/models/user_spec.rb:24 (FAILED - 9) example at ./spec/models/user_spec.rb:25 (FAILED - 10) Failures: 1) User validations Failure/Error: it { should validate_presence_of :first_name } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255f7fb88> # ./spec/models/user_spec.rb:13:in `block (3 levels) in <top (required)>'' 2) User validations Failure/Error: it { should validate_presence_of :last_name } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255e9fad8> # ./spec/models/user_spec.rb:14:in `block (3 levels) in <top (required)>'' 3) User validations Failure/Error: it { should validate_presence_of :email } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255ded568> # ./spec/models/user_spec.rb:15:in `block (3 levels) in <top (required)>'' 4) User validations Failure/Error: it { should validate_presence_of :birthday } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255d65398> # ./spec/models/user_spec.rb:16:in `block (3 levels) in <top (required)>'' 5) User validations Failure/Error: it { should validate_presence_of :gender } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255cb7888> # ./spec/models/user_spec.rb:17:in `block (3 levels) in <top (required)>'' 6) User validations Failure/Error: it { should validate_presence_of :facebook_user_id } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255c356f8> # ./spec/models/user_spec.rb:18:in `block (3 levels) in <top (required)>'' 7) User validations Failure/Error: it { should validate_presence_of :facebook_user_token } NoMethodError: undefined method `validate_presence_of'' for #<RSpec::ExampleGroups::User::Validations:0x007fc255b86a40> # ./spec/models/user_spec.rb:19:in `block (3 levels) in <top (required)>'' 8) User validations uniqueness Failure/Error: before { create(:user) } ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" DETAIL: Key (email)=([email protected]) already exists. : INSERT INTO "users" ("first_name", "last_name", "email", "facebook_user_id", "facebook_user_token", "birthday", "gender", "token", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id" # ./spec/models/user_spec.rb:22:in `block (4 levels) in <top (required)>'' 9) User validations uniqueness Failure/Error: before { create(:user) } ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" DETAIL: Key (email)=([email protected]) already exists. : INSERT INTO "users" ("first_name", "last_name", "email", "facebook_user_id", "facebook_user_token", "birthday", "gender", "token", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id" # ./spec/models/user_spec.rb:22:in `block (4 levels) in <top (required)>'' 10) User validations uniqueness Failure/Error: before { create(:user) } ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" DETAIL: Key (email)=([email protected]) already exists. : INSERT INTO "users" ("first_name", "last_name", "email", "facebook_user_id", "facebook_user_token", "birthday", "gender", "token", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id" # ./spec/models/user_spec.rb:22:in `block (4 levels) in <top (required)>'' Finished in 0.13486 seconds (files took 3.99 seconds to load) 12 examples, 10 failures Failed examples: rspec ./spec/models/user_spec.rb:13 # User validations rspec ./spec/models/user_spec.rb:14 # User validations rspec ./spec/models/user_spec.rb:15 # User validations rspec ./spec/models/user_spec.rb:16 # User validations rspec ./spec/models/user_spec.rb:17 # User validations rspec ./spec/models/user_spec.rb:18 # User validations rspec ./spec/models/user_spec.rb:19 # User validations rspec ./spec/models/user_spec.rb:23 # User validations uniqueness rspec ./spec/models/user_spec.rb:24 # User validations uniqueness rspec ./spec/models/user_spec.rb:25 # User validations uniqueness


Creo que debes agregar lo siguiente a tu spec_helper.rb

require ''shoulda/matchers''

Sus especificaciones están perdiendo los métodos de shoulda matcher.

Aquí está la fuente. Puedes comprobar. La gente se queja cosas similares. https://github.com/thoughtbot/shoulda-matchers/issues/384