Как СУШИТЬ (эти) тесты RSpec, используя пользовательские средства сравнения - PullRequest
1 голос
/ 14 января 2012

В настоящее время у меня есть следующие тесты, которые выглядят хорошими кандидатами для небольшого СУХОГО лечения:

describe League do

  context 'attributes validation' do
    before(:each) do
      @league = League.new
    end

    it 'should be invalid without a short_name' do
      @league.attributes = valid_league_attributes.except(:short_name)
      @league.should_not be_valid
      @league.should have(1).error_on(:short_name)
      @league.errors[:short_name].should == ["can't be blank"]
      @league.short_name = 'NFL'
      @league.should be_valid
    end

    it 'should be invalid without a long_name' do
      @league.attributes = valid_league_attributes.except(:long_name)
      @league.should_not be_valid
      @league.should have(2).error_on(:long_name)
      @league.errors[:long_name].should == ["can't be blank", 'is not included in the list']
      @league.long_name = 'National Football League'
      @league.should be_valid
    end
  end

end

Можно ли сделать это более СУХИМ, используя Custom Matchers или какую-то другую утилиту?

Ответы [ 2 ]

0 голосов
/ 14 января 2012

Возможно, вы захотите взглянуть на musta

Это позволит вам написать

describe League do
  subject {League.new}

  it {should validate_presence_of(:long_name)}
  it {should validate_presence_of(:short_name)}
end

Существует также множество других сопоставителей для проверок и ассоциаций.

0 голосов
/ 14 января 2012

Возможно, но я бы не советовал. Эти два теста в достаточной степени отличаются от того, что написание метода, позволяющего обернуть их, вносит большую сложность, чем кажется оправданным, и усложнит поиск и устранение неисправностей, если один из двух тестов когда-либо не пройдёт.

...