We'll begin by setting up a fresh Laravel application and pulling in Cypress. We'll eventually require a variety of Laravel-specific helpers for logging in, seeding a database, triggering an Artisan command, and more. So with that in mind, we'll also pull in a Composer package of mine that I use in all my Laravel apps.
Let's begin by using TDD to drive the creation of a blog posts landing page. This will give us the opportunity to review and discuss a basic workflow you can expect to follow.
Often in this series, we'll use BDD to drive our applications. However, the reality is that you'll often find yourself filling in tests after the fact. With that in mind, let's work with the actual Laracasts codebase and fill in a series of end-to-end tests for the site's login modal.
Let's take a few moments to discuss the difference between commands and assertions, while also reviewing the underlying Chai assertion library that Cypress makes use of.
A true end-to-end test will span your entire system. This means no swapping things in the container, no faking third party APIs, and no stubbing endpoints. However, once you have at least one test that hits all necessary endpoints, the remaining tests are free to swap in fake data. This way, for example, you don't need to hit Stripe's server every time you test a portion of your registration form.
In this episode, we'll review how to intercept any XHR request and fake its response with fixture data.
Let's review another example using the Laracasts codebase. How would we go about testing registration that hits a third-party billing API, like Stripe?
Iframes can be a little tricky when using Cypress. In this episode, we'll leverage retry-ability to wait until an iframe has loaded before continuing with the necessary queries and assertions.
View the source code for this episode on GitHub.
*Series still in development. Check back often for updates.