Testování dvě různá očekávání se vysmívá

hlasů
1

Nedávno jsem právě přidali vymyslet na svém prvním Rails3 app, a mám trochu problémy s testy regulátoru.

Zkouším třídu řadiče uživatel, který je stejný model, který Vymyslete použití. Takže na začátku mé spec mám toto:

before(:each) do
  sign_in @user = Factory.create(:user)
end

Teď mohu získat testovací průchod bez použití výsměch nebo stubbing třeba takto:

describe GET edit do
  it assigns the requested user as @user do
    user = Factory(:user)
    get :edit, :id => user.id
    assigns(:user).should eql(user)
  end
end

Ale pro vzdělávací účely bych chtěl vědět, jak se dostat do práce s posměšky a stubbing, za normálních okolností by to bylo úplně přímočará, ale zdá se, Vytvářet volá User.findpřed akcí regulátoru, a dělat test nezdaří.

describe GET edit do
  it assigns the requested user as @user do
    user = Factory(:user)
    User.expects(:find).with(:first, :conditions => {:id => 37}).returns(user)
    get :edit, :id => '37'
    assigns(:user).should be(user)
  end
end

Také tím, že přidá twicena očekávání, což by také selhat, protože první výzva k vyhledání se liší od jedné jsem nastavení očekávání pro.

Jakýkoliv pohled by ocenili.

Položena 28/07/2010 v 14:27
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
5

Můžete zadat více hodnot vrácené buď s stubsnebo expectsjako tak:

require 'test/unit'
require 'mocha'

class Foo
end

class FooTest < Test::Unit::TestCase

  # This passes!
  def test_multiple_returns_with_stubs
    Foo.stubs(:find).returns('a').returns('b').returns('c')

    assert_equal('a', Foo.find('z'))
    assert_equal('b', Foo.find('y'))
    assert_equal('c', Foo.find('x'))
  end

  # This passes too!
  def test_multiple_returns_with_expects
    Foo.expects(:find).times(1..3).returns('a').returns('b').returns('c')

    assert_equal('a', Foo.find('z'))
    assert_equal('b', Foo.find('y'))
    assert_equal('c', Foo.find('x'))
  end
end

Rozdíl, zdá se, že expectspotřebuje vědět, kolikrát to bude nazvat. Pokud nechcete nic specifikovat, předpokládá oncea bude stěžovat na následných výzev. stubsnestará.

Odpovězeno 29/07/2010 v 21:24
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more