Преимущества 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 глубоко вникли в проблемы тестирования и изобрели гибкий и
элегантный синтаксис.