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

niku -E:) niku at niku.name
Fri Mar 25 19:43:51 EDT 2011


finally, I solved this code.

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]) # fail
    expect { subject.increment }.to change{ subject.ary.clone
}.from([0]).to([0,1])
  end

  it "should increment the ary by [1]" do
    expect { subject.increment }.to change{ subject.ary.clone }.by([1])
  end
end



On Mon, Mar 21, 2011 at 10:54 AM, niku -E:) <niku at niku.name> wrote:
> 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