Hello!

I think that on describe "#download_file" you are only testing if the stub
works (and it does not make sense), besides testing if the method
#download_file does what you want.

The last describe, looks dependent of the download_file execution but you
didn’t run it neither stub its result.
On RSpec (or every test framework I remember), each test (it) is isolated
from others, so a test can not depend of an above test (most because the
order of the test can be randomly chosen, so a test must really not depend
that an other test have run).

So, a better test, might be something like:

describe Download do
  let(:download)  {Download.new}
  let(:file_path) { "http://file_path.com/test_file.json"; }
  let(:file_content) { "{ 'id': 1, 'content': 'blabla' }" }
  before { stub_request(:get, file_path).to_return(:body => file_content) }

  describe "#download_file" do
    before { allow(download).to receive(:file_path).and_return(file_path)  }

    it 'downloads a file from remote file location ' do
      download.download_file
      expect(download.file_content).to eq(file_content)
    end

  end

  describe "#valid_json" do
    before { allow(download).to
receive(:file_content).and_return(file_content) }

    it 'confirms downloaded file is JSON' do
      download.valid_json
      expect(download).to have_received(:to_json)
      expect(download.to_json).to have_json_path("id")
      expect(download.to_json).to have_json_type(Integer).at_path("id")
      expect(download.valid_json).to be_truthy
    end
  end
end

Have a nice hacking! :D

Carlos Figueiredo

On Tue, Dec 23, 2014 at 2:30 PM, trekr5 <[email protected]> wrote:

Hello everyone,
>
>
> I'm trying to get to grips with the new allow syntax (for stubbing) in
> rspec 3.0 and would really appreciate someone looking at my code and
> telling me whether it's right(or wrong).
>
> *download.rb*
>
> class Download
>   def download_file
>     # code to download a file
>   end
>
>   def valid_json
>     # code to verify downloaded file is file type json
>   endend
>
> *download_spec.rb*
>
> require 'spec_helper'
> require 'json_spec'
>
> describe Download do
>   let(:download)  {Download.new}
>
>   describe "#download_file" do
>     it 'downloads a file from remote file location ' do
>       allow(download).to receive(:exist).and_return(true)
>       download.download_file
>       expect(download).to have_received(:exist).and_return(true)
>     end
>   end
>
>   describe "#valid_json" do
>     it 'confirms downloaded file is JSON' do
>       # download.to_json.should have_json_path("id")
>       # download.to_json.should have_json_type(Integer).at_path("id")
>       expect(download.to_json).to have_json_path("id")
>       expect(download.to_json).to have_json_type(Integer).at_path("id")
>     end
>   endend
>
> Many thanks in advance!
>
> --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rspec/3ace07ec-b440-47e5-9c09-ce6c14109f53%40googlegroups.com
> <https://groups.google.com/d/msgid/rspec/3ace07ec-b440-47e5-9c09-ce6c14109f53%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
​

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/CANPOtXu0KptD3B7LZ8LwjvQD7oQWWRRxm3vMT4c2vMcbTHv5mQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to