Rails 3.1 Rspec Создание поля проверки контрольного примера для модели - PullRequest
4 голосов
/ 20 июля 2011

Я пытаюсь создать тестовый пример для модели User.По сути, он проверит наличие имени и фамилии и фамилии.

Что я пытаюсь сделать, это проверить, является ли ошибка в определенном поле пустой или нет, и она должна быть пустой.Однако это всегда терпит неудачу.

Как правильно сделать это?

Вот мой код

На моем user_spec.rb

require 'spec_helper'

describe User do

  before do
    @user = User.new
  end

  it "must have a first name" do
    @user.errors[:first_name].should_not be_empty
  end

  it "must have a last name" do
    @user.errors[:last_name].should_not be_empty
  end
end

На моем файле user.rb

class User < ActiveRecord::Base
  validates :first_name, :presence => true
  validates :last_name, :presence => true
end

Ответы [ 2 ]

18 голосов
/ 07 января 2012

Вы можете проверить, просто выполнив это:

describe 'validations' do
  it { should validate_presence_of :firstname }
  it { should validate_presence_of :lastname  }
end

Взгляните на совпадения musta для всех таких стандартных проверок Rails. Этот способ не только более лаконичен, но и заботится о положительном случае. Это означает, что вам не нужно тестировать сценарий, упомянутый ниже:

it "passed validations when first_name is set"
  user = User.create(:firstname => 'f', :lastname => 'l')
  user.errors[:first_name].should be_empty
  user.errors[:last_name].should be_empty
end
16 голосов
/ 06 августа 2011

RSpec поддерживает понятие "неявного" субъекта. Если ваш первый аргумент в блоке "description" - это класс, RSpec автоматически делает экземпляр этого класса доступным для ваших спецификаций. Смотри http://relishapp.com/rspec/rspec-core/v/2-6/dir/subject/implicit-subject.

require 'spec_helper'

describe User do

  it "must have a first name" do    
    subject.should have(1).error_on(:first_name)
  end

  it "must have a last name" do
    subject.should have(1).error_on(:last_name)
  end
end

, что приводит к выводу RSpec (если используется документация --format):

User
  must have a first name
  must have a last name

Вы можете сократить его еще больше, если вы довольны значениями по умолчанию RSpec:

require 'spec_helper'

describe User do
  it { should have(1).error_on(:first_name) }
  it { should have(1).error_on(:last_name) }
end

, что приводит к:

User
  should have 1 error on :first_name
  should have 1 error on :last_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...