Урок 1.00:11:30
What Do We Build First?
Урок 2.00:09:06
Sketching out Our First Test
Урок 3.00:16:42
Getting to Green
Урок 4.00:11:03
Unit Testing Presentation Logic
Урок 5.00:07:16
Refactoring for Speed
Урок 6.00:06:56
Hiding Unpublished Concerts
Урок 7.00:05:50
Testing Query Scopes
Урок 8.00:04:10
Factory States
Урок 9.00:01:02
Introducing the Next Feature
Урок 10.00:09:47
Browser Testing vs Endpoint Testing
Урок 11.00:06:23
Outlining the First Purchasing Test
Урок 12.00:12:23
Faking the Payment Gateway
Урок 13.00:05:32
Adding Tickets to Orders
Урок 14.00:05:16
Encapsulating Relationship Logic in the Model
Урок 15.00:06:56
Getting Started with Validation Testing
Урок 16.00:05:30
Reducing Duplication with Custom Assertions
Урок 17.00:07:00
Handling Failed Charges
Урок 18.00:06:40
Preventing Ticket Sales to Unpublished Concerts
Урок 19.00:03:46
Outlining the First Test Case
Урок 20.00:08:20
Adding Tickets to Concerts
Урок 21.00:09:29
Refusing Orders When There Are No More Tickets
Урок 22.00:04:25
Finishing the Feature Test
Урок 23.00:05:59
Cancelling Failed Orders
Урок 24.00:07:49
Refactoring and Redundant Test Coverage
Урок 25.00:11:57
Cleaning Up Our Tests
Урок 26.00:07:32
Asserting Against JSON Responses
Урок 27.00:06:22
Returning Order Details
Урок 28.00:04:39
This Design Sucks
Урок 29.00:05:05
Persisting the Order Amount
Урок 30.00:06:01
Removing the Need to Cancel Orders
Урок 31.00:07:06
Preparing for Extraction
Урок 32.00:04:46
Extracting a Named Constructor
Урок 33.00:05:23
Precomputing the Order Amount
Урок 34.00:05:11
Uncovering a New Domain Object
Урок 35.00:03:48
You Might Not Need a Mocking Framework
Урок 36.00:01:43
Uh Oh, a Race Condition!
Урок 37.00:04:17
Requestception
Урок 38.00:05:38
Hooking into Charges
Урок 39.00:03:01
Uh Oh, a Segfault!
Урок 40.00:05:04
Replicating the Failure at the Unit Level
Урок 41.00:07:00
Reserving Individual Tickets
Урок 42.00:03:58
Reserved Means Reserved!
Урок 43.00:05:59
That Guy Stole My Tickets!
Урок 44.00:05:46
Cancelling Reservations
Урок 45.00:06:47
Refactoring Mocks to Spies
Урок 46.00:05:53
A Change in Behavior
Урок 47.00:05:38
Deleting Stale Tests
Урок 48.00:06:48
Cleaning up a Loose Variable
Урок 49.00:07:28
Moving the Email to the Reservation
Урок 50.00:09:50
Refactoring "Long Parameter List" Using "Preserve Whole Object"
Урок 51.00:06:12
Green with Feature Envy
Урок 52.00:09:04
Avoiding Service Classes with Method Injection
Урок 53.00:10:01
Generating a Valid Payment Token
Урок 54.00:04:05
Retrieving the Last Charge
Урок 55.00:04:37
Making a Successful Charge
Урок 56.00:12:18
Dealing with Lingering State
Урок 57.00:09:41
Don't Mock What You Don't Own
Урок 58.00:02:19
Using Groups to Skip Integration Tests
Урок 59.00:03:59
Handling Invalid Payment Tokens
Урок 60.00:04:28
The Moment of Truth
Урок 61.00:04:29
When Interfaces Aren't Enough
Урок 62.00:12:38
Refactoring Towards Duplication
Урок 63.00:08:10
Capturing Charges with Callbacks
Урок 64.00:07:42
Making the Tests Identical
Урок 65.00:07:42
Extracting a Contract Test
Урок 66.00:08:24
Extracting the Failure Case
Урок 67.00:04:49
Upgrading to Laravel 5.4
Урок 68.00:10:26
Removing the BrowserKit Dependency
Урок 69.00:07:52
Sketching Out Order Confirmations
Урок 70.00:05:21
Driving out the Endpoint
Урок 71.00:05:46
Asserting Against View Data
Урок 72.00:06:51
Extracting a Finder Method
Урок 73.00:08:49
Making Static Data Real
Урок 74.00:08:24
Deciding What to Test in a View
Урок 75.00:05:11
Decoupling Data from Presentation
Урок 76.00:06:28
Fixing the Test Suite
Урок 77.00:06:28
Stubbing the Interface
Урок 78.00:05:16
Updating Our Unit Tests
Урок 79.00:04:48
Confirmation Number Characteristics
Урок 80.00:07:29
Testing the Confirmation Number Format
Урок 81.00:08:44
Ensuring Uniqueness
Урок 82.00:05:59
Refactoring to a Facade
Урок 83.00:17:49
Promoting Charges to Objects
Урок 84.00:11:02
Leveraging Our Contract Tests
Урок 85.00:08:01
Storing Charge Details with Orders
Урок 86.00:10:27
Deleting More Stale Code
Урок 87.00:08:27
Feature Test and JSON Updates
Урок 88.00:09:12
Claiming Tickets When Creating Orders
Урок 89.00:10:54
Assigning Codes When Claiming Tickets
Урок 90.00:11:55
The Birthday Problem
Урок 91.00:11:44
Integrating Hashids
Урок 92.00:04:21
Dealing with Out of Sync Mocks
Урок 93.00:05:19
Wiring It All Together
Урок 94.00:02:52
Ready to Demo
Урок 95.00:10:35
Using a Fake to Intercept Email
Урок 96.00:10:39
Testing Mailable Contents
Урок 97.00:02:40
Cleanup and Demo
Урок 98.00:11:26
Testing the Login Endpoint
Урок 99.00:04:42
Should You TDD Simple Templates?
Урок 100.00:06:31
Namespacing Our Test Suite
Урок 101.00:05:22
Getting Started with Laravel Dusk
Урок 102.00:06:26
QA Testing the Login Flow
Урок 103.00:06:24
Preventing Guests from Adding Concerts
Урок 104.00:14:20
Adding a Valid Concert
Урок 105.00:09:49
Validation and Redirects
Урок 106.00:04:21
Converting Empty Strings to Null
Урок 107.00:09:13
Reducing Noise with Form Factories
Урок 108.00:06:49
Connecting Promoters and Concerts
Урок 109.00:05:46
Autopublishing New Concerts
Урок 110.00:12:09
Asserting Against View Objects
Урок 111.00:05:47
Avoiding Sort-Sensitive Tests
Урок 112.00:11:39
Refactoring Assertions with Macros
Урок 113.00:05:29
Viewing the Update Form
Урок 114.00:09:27
The First Update Test
Урок 115.00:09:14
Driving Out Basic Concert Updates
Урок 116.00:11:31
Restricting Updates to Unpublished Concerts
Урок 117.00:06:26
Storing the Intended Ticket Quantity
Урок 118.00:05:25
Updating the Other Tests
Урок 119.00:07:52
Refactoring Away Some Test Duplication
Урок 120.00:08:28
Creating Tickets at Time of Publish
Урок 121.00:07:44
Custom Factory Classes
Урок 122.00:07:35
Discovering a New Resource
Урок 123.00:11:12
Creating Published Concerts
Урок 124.00:04:03
Adding Concerts without Publishing
Урок 125.00:08:47
Pushing Logic Out of the View
Урок 126.00:06:20
More Custom Assertion Fun
Урок 127.00:08:22
Calculating Tickets Sold
Урок 128.00:08:58
Making the Progress Bar Work
Урок 129.00:08:40
Total Revenue and a Relationship Bug
Урок 130.00:11:28
Creating a Custom OrderFactory
Урок 131.00:12:15
Asserting Against Sort Order
Урок 132.00:03:41
Splitting Large Tests
Урок 133.00:12:31
Storing Messages for Attendees
Урок 134.00:09:27
Confirming That a Job Was Dispatched
Урок 135.00:18:29
Unit Testing the Job
Урок 136.00:11:16
Refactoring for Robustness
Урок 137.00:04:11
Mailable Testing Refresher and Demo
Урок 138.00:07:41
Upgrading to Laravel 5.5
Урок 139.00:10:43
Faking Uploads and File Systems
Урок 140.00:09:16
Storing Files and Comparing Content
Урок 141.00:07:45
Validating Poster Images
Урок 142.00:05:39
Optional Files and the Null Object Pattern
Урок 143.00:10:41
Testing Events
Урок 144.00:11:42
Testing the Event Listener
Урок 145.00:12:26
Resizing the Posted Image
Урок 146.00:10:51
Optimizing the Image Size
Урок 147.00:03:40
Upgrading Laravel and Deleting Some Code
Урок 148.00:10:25
Viewing an Unused Invitation
Урок 149.00:07:29
Viewing Used or Invalid Invitations
Урок 150.00:12:46
Registering with a Valid Invitation
Урок 151.00:05:20
Registering with an Invalid Invitation
Урок 152.00:05:54
Validating Promoter Registration
Урок 153.00:17:40
Testing a Console Command
Урок 154.00:05:52
Sending Promoters an Invitation Email
Урок 155.00:07:53
Test-Driving the Email Contents
Урок 156.00:10:55
Getting Cozy with Stripe Connect
Урок 157.00:10:05
Authorizing with Stripe
Урок 158.00:17:44
Exchanging Tokens
Урок 159.00:13:29
Unit Testing Middleware
Урок 160.00:09:43
Testing Callbacks with Invokables
Урок 161.00:08:16
Testing That Middleware Is Applied
Урок 162.00:03:30
Updating Factories and a Speed Trick
Урок 163.00:10:43
Total Charges for a Specific Account
Урок 164.00:07:47
Paying Promoters Directly
Урок 165.00:16:53
Splitting Payments with Stripe
Урок 166.00:04:36
It's Alive