13. RSpec and Behavior-Driven Development

13. RSpec and Behavior-Driven Development

13. RSpec and Behavior-Driven Development

6 декември 2011

Днес

Въпросът от по-рано?

Какъв е вашият процес?

Днес ще си говорим как тестовете се вместват в него.

Преди това

Какво е unit test и защо го пишем?

(това е въпрос към вас?)

Градивните единици

(или "идиници", ако сте от Пловдив)

xUnit и производните винаги имат следните три концепции:

RSpec

Градивните единици

в класически xUnit

require 'minitest/autorun'

class UniverseTest < MiniTest::Unit::TestCase
  def test_answer_is_positive
    assert Universe.answer > 0
  end

  def test_equals_six_multiplied_by_nine
    assert_equal 42, Universe.answer
  end
end

Градивните единици

в RSpec

describe Universe do
  it "contains the answer of life and everything else" do
    Universe.answer.should == 42
  end

  it "likes to give even answers" do
    Universe.answer.should be_even
  end
end

RSpec

тест и група

describe 'System under test' do
  it 'has a specific behavior' do
    # ...
  end
end

RSpec

проверки

describe 'System under test' do
  it 'has a specific behavior' do
    answer.should == 42
  end
end

Rspec

обърнете внимание

Проверките

още expectations

Какви неща може да сложите след should (или should_not)

eq

още should ==

Проверява дали нещата са равни с ==

actual.should eq(expected)
actual.should_not eq(expected)
actual.should == expected
actual.should_not == expected

actual.should eq expected

eql и equal

Като съответните методи с ?

actual.should eql expected
actual.should equal expected

be_*

(и have_*)

be_foo проверява foo?

7.should_not be_zero
[].should be_empty
x.should be_multiple_of(3)

{a: 2}.should have_key(:a)

have(n).items

group.should have(3).users

assert_equal 3, group.users.size

before

describe 'Something' do
  before do
    @answer = 6 * 9
  end

  it 'is fourty-two' do
    @answer.should eq 42
  end

  it 'is non-zero' do
    @answer.should_not be_zero
  end
end

after

Има и after блок, аналогичен на before

helper методи

describe 'Something' do
  def answer
    42
  end

  it 'has the answer' do
    answer.should eq 42
  end
end

let

На практика, мемоизиран метод

describe 'Answer to life' do
  let(:answer) { 42 }

  it 'is non-zero' do
    answer.should_not be_zero
  end
end

Въпроси