[rspec-users] How do I use expect{}.to change().from().to() on Array?

niku -E:) niku at niku.name
Sun Mar 20 21:54:50 EDT 2011


Sorry. Test comment is incorrect.
This is intentional test.

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([0]).to([0,1])
    subject.ary.should == [0]
    subject.increment
    subject.ary.should == [0,1]
  end
end

On Mon, Mar 21, 2011 at 10:41 AM, niku -E:) <niku at niku.name> wrote:
> 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 <jko170 at gmail.com> wrote:
>>
>>
>> On Tue, Mar 15, 2011 at 10:08 AM, Justin Ko <jko170 at gmail.com> wrote:
>>>
>>>
>>> On Tue, Mar 15, 2011 at 8:57 AM, niku -E:) <niku at 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 at 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? :)
>


More information about the rspec-users mailing list