Динамический контекст Rspec - не заставляйте себя повторяться

Преимущества rspec позволяют использовать эффективную технику для проведения тестов.
Теперь вы можете создавать и определять контекст, используя более гибкий подход, чем ранее.
У нас было меньше проблем с предметом (субъектом) и поведением. А тестирование
проводится как раз ради контекста. Из-за того, что веб-приложения работают с данными, их
поведение в значительной степени зависит от базы данных.

Хорошо организованный контекст создает реальную проблему при тестировании. в отличие от
TestUnit, примеры Rspec могут включать в себя сгруппированный контекст и даже динамический
контекст с элементом let.
Не смотря на отложенную инициализацию блоков let, они определяются перед каждым
добавочным блоком. Вы поймете это, глянув на пример.

В данном примере заказы должны быть доставлены сразу после формирования в
подтвержденную ученую запись, и не быть доставлены в неподтвержденную учетную запись.
describe Order do
  context "after create" do #defining a partial context
    before(:each) do
      subject.customer.confirmed = confirmed
      subject.save!
    end
 
    context "when customer is confirmed" do 
      let(:confirmed) { true }
      it { should be_delivered }
    end
    
    context "when customer is not confirmed" do 
      let(:confirmed) { false }
      it { should_not be_delivered }
    end
  end
end

В этом примере вы можете видеть частичное определение контекста и особое поведение в двух вложенных контекстах. Мы можем вызывать необъявленную функцию и определить ее позже, и так по-
разному в разных контекстах.

Другой пример, т.е. сопоставление с эталоном (термин эрланга), разработан для тестирования
служебных функций.
Полагаю, мы имеем функцию интерпретации булевого выражения:
describe Expression
  describe ".run" do
 
    subject { Expression.run(arg) }
 
    context "with '&' where both true" do
      let(:arg) { "true & true" }
      it {should be_true}
    end
 
    context "with '&' where one false" do
      let(:arg) { "false & true" }
      it {should be_false}
    end
    ........
  end
end

Отличная стратегия - запускать одну и ту же функцию с разными аргументами.

Rspec в значительной степени превосходит все существующие фреймворки для
автотестирования приложений. В отличие от других клонов Rspec (в том числе для других языков
программирования), авторы Rpsec глубоко вникли в проблемы тестирования и изобрели гибкий и
элегантный синтаксис.
Добавлено: 04 Сентября 2013 02:00:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...