I understand that "expect{}.to change()" can't test "destructive method".
So, I should write test like that. correct?

require 'rspec'

class Ary
  attr_reader :ary
  def initialize
    @count = 0
    @ary = []
    increment
  end
  def increment
    @ary << @count
    @count += 1
  end
end

describe Ary, "#ary" do
  subject{ Ary.new }
  it "should increment the ary" do
    # expect { subject.increment }.to change(subject, :ary).from([]).to([0])
    subject.ary.should == [0]
    subject.increment
    subject.ary.should == [0,1]
  end
end

On Wed, Mar 16, 2011 at 2:41 AM, Justin Ko <jko...@gmail.com> wrote:
>
>
> On Tue, Mar 15, 2011 at 10:08 AM, Justin Ko <jko...@gmail.com> wrote:
>>
>>
>> On Tue, Mar 15, 2011 at 8:57 AM, niku -E:) <n...@niku.name> wrote:
>>>
>>> Hi.
>>>
>>> I'm using ruby1.9.2 and rspec2.5.1
>>> I want to use "expect{}.to change().from().to()" like this
>>>
>>> https://gist.github.com/870897
>>>
>>> When Int class, it passed.
>>> When Ary class, it failed.
>>>
>>> Why was Ary test failed and How do I pass this test?
>>>
>>> regards.
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users@rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>> Your Ary @ary variable is initialized as "[]". So of course calling
>> increment on it will change it to "[0]". For your spec to pass, initialize
>> it as "[0]"
>
> I'm completely wrong. Didn't read your code properly. Where is the delete
> link? :)
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to