My upcoming book, Effective Testing with RSpec 3 <https://pragprog.com/book/rspec3/effective-testing-with-rspec-3>, has an example of building a JSON API using end-to-end acceptance tests, isolated unit tests, and integration tests. It might fit what you're looking for better since you mentioned you're looking for examples of end-to-end testing of REST services.
The code for the book is all online <https://github.com/rspec-3-book>, as well. All that said, Xavier's screen cast is very good, and I definitely recommend it, particularly if you do better with videos than printed materials. Myron On Wed, Jul 19, 2017 at 4:30 AM, Jon Gordon <[email protected]> wrote: > Thanks Xavier :) > I will be checking this course! > > Is there perhaps an open-source project with end-to-end spec tests you can > recommend (REST tests are preferred, not Capybara)? something to get a > reference from? > Thank you. > > On Wednesday, July 19, 2017 at 2:24:46 AM UTC+3, Xavier Shay wrote: >> >> Obligatory plug for https://www.pluralsight.co >> m/courses/rspec-ruby-application-testing which touches on some of the >> themes you're asking about :) >> >> >> On Tue, Jul 18, 2017, at 04:06 PM, Jon Rowe wrote: >> >> Hi Jon >> >> A couple of tips, firstly you can stub out your external dependencies for >> an end to end test, it just depends on the level of integration you want, >> it’s equally fine to do what you propose. For injecting your endpoint (IP, >> hostname or otherwise) you have a couple of ways of doing it, the simplest >> is to use environment variables e.g. `ENV[‘API_ENDPOINT’]`, or you can >> build yourself a config system like you mention. The reason why you don’t >> see big projects using external configuration files is it is usually done >> at the app level rather than in rspec. >> >> If you chose to go down the config file route, xml, yml or otherwise, >> you’d be better off loading it in a spec_helper or other such support file, >> and assigning it somewhere. >> >> Personally I would go with json fixture files for static json, or a >> generator method if it needs to be dynamic. >> >> Cheers. >> Jon >> >> Jon Rowe >> --------------------------- >> [email protected] >> jonrowe.co.uk >> >> On Wednesday, 19 July 2017 at 01:52, Jon Gordon wrote: >> >> >> Hi everyone, >> >> I'm quite new to RSpec, and I have used it mainly for unit-testing. >> Lately, a need for a small number of end-to-end tests became relevant. When >> writing test-cases, I'm trying to stub all dependencies, but because that's >> not an option when doing integration tests, I need some help to understand >> what's the proper way to do things. Here's couple of questions: >> >> 1. The test requires an IP for remote machine (which is not local and >> sadly can not be). Obviously, I shouldn't supply the IP inside the spec >> file. The simple way is reading an external YML file with the IP (that will >> get created automatically during the CI process with the right IP for >> example) and populate the IP directly from it. But, I was checking couple >> of big project that uses rspec, and I never seen an external configuration >> file, so I'm thinking perhaps there is a better way of doing it >> >> 2. If indeed YML file is the right answer, I'm not sure if reading from >> the YML file every spec file (that uses this service) is the right thing to >> do? Shouldn't I be using hooks instead for that? >> >> 3. The test-object is a REST service, and some of the requests require >> big json object. I have two options: >> a. I can create the json object in the spec file itself (which makes >> all information visible to you from the spec file itself, but clutters the >> spec) >> b. Creating an external default fixture (which is basically a json >> file), read from it during the spec, and re-write the values that are >> relevant for the specific tests. >> >> Thank you! >> >> >> -- >> 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/ms >> gid/rspec/61ac9ade-1045-4211-80d3-441ef01ae7cb%40googlegroups.com >> <https://groups.google.com/d/msgid/rspec/61ac9ade-1045-4211-80d3-441ef01ae7cb%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/ms >> gid/rspec/3FF6FCF2018A482CBDC70C02BAFFB643%40jonrowe.co.uk >> <https://groups.google.com/d/msgid/rspec/3FF6FCF2018A482CBDC70C02BAFFB643%40jonrowe.co.uk?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/28f3f239-1515-437b-b011-82b2dd163502%40googlegroups.com > <https://groups.google.com/d/msgid/rspec/28f3f239-1515-437b-b011-82b2dd163502%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/CADUxQmto1JRtt%2BoQaOuzPeB0%3DWJUD8gWwsFTNTz3uscHJikUxA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
