In general, if you need absolutely unique strings, `SecureRandom.uuid` is a good way to get one. UUIDs are universally unique, after all :).
That said, the fact that you are running out of unique random strings from faker is concerning. All tests should work off of a "clean slate" in your database, either by wrapping each test in a rolled-back transaction, or by truncating your DB tables. Are you "leaking" DB records between tests? Myron On Wed, Jul 19, 2017 at 12:42 PM, Jon Gordon <[email protected]> wrote: > Hi Myron, > > I will definitely check the book - looks like it's perfect for RSpec > beginner. Also, thanks for sharing the example online - that's alone can > give me a good starting base :) > > I will ask another question while posting - for unit-testing I'm using > Faker gem to fake common strings. However, in end to end tests, we work > against a database - so even if I'm using the 'unique' method, I'm running > out of unique strings after a while. I'm using 'securerandom' to generate > random number, but wondering if there's a better approach for that. > > Thanks! > > On Wednesday, July 19, 2017 at 6:33:49 PM UTC+3, Myron Marston wrote: >> >> My upcoming book, Effective Testing with RSpec 3 >> <https://www.google.com/url?q=https%3A%2F%2Fpragprog.com%2Fbook%2Frspec3%2Feffective-testing-with-rspec-3&sa=D&sntz=1&usg=AFQjCNHGLaAn9OUSvszwbNhLSkP9Ypy-7A>, >> 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/ms >>> gid/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/c297c4c9-5225-47d9-a6e2-80f461bd1226%40googlegroups.com > <https://groups.google.com/d/msgid/rspec/c297c4c9-5225-47d9-a6e2-80f461bd1226%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/CADUxQmsoJ0o-FVeANeKNn7MZ3i7uPw7oTZn66Vh%3DgaMvBkZixA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
