Index
A
- acceptance test / Acceptance tests
- API calls
- verifying, into service / Verify the API calls into the service
- TestServer / TestServer
- ServerFixture / ServerFixture
- API project
- configuring / Configuring the API project
- integration test project / Integration test project
- test, creating / Where to begin?
- repository calls, verifying into DB context / Verifying the repository calls into the DB context
- service calls, verifying through repository / Verify that the service calls the DB through the repository
- API calls, verifying into service / Verify the API calls into the service
- API service
- unit testing / Unit-testing an API service
- implementing / Implementing a real API service
- mock API, replacing / Replacing the mock API with the real API service
- Sinon, used to mock Ajax responses / Using Sinon to mock Ajax responses
- application configuration / Application configuration
- API test, Speaker listing
- about / API tests
- Moq / Moq
- exception cases, testing / Testing exception cases
- application configuration / Application configuration
- Application Programming Interface (API) / .NET Web API
B
- back-to-front
- about / Back-to-front
- data source, defining / Defining a data source
- business layer, creating / Creating a business layer
- user interface, building / Building a user interface
- Behavior Driven Development (BDD) / An alternative approach , Jest
- bugs
- fixing / Fixing bugs
- business layer
- creating / Creating a business layer, Creating a business layer
- defining / Defining a business layer
C
- Chai
- about / Mocha and Chai, Chai
- configuring / Configuring to use Mocha and Chai, Configuring Mocha, Chai, Enzyme, and Sinon
- clean test, Speaker listing / Clean tests
- code kata
- about / Code katas
- setting up / A quick kata to check our test setup
- requisites / The requirements
- execution / The execution
- beginning / Starting the kata
- Command Query Responsibility Separation (CQRS) / The Create method
- concrete class
- abstracting / Step two – abstract the concrete class
- Create method, converting to generic method / Converting Create to a generic method
- Get method, converting to generic method / Converting Get to a generic method
- GetAll method, converting to generic method / Converting GetAll to a generic method
- Update method, converting to generic method / Converting Update to a generic method
- Delete method, converting to generic method / Converting Delete to a generic method
- Create, Read, Update, and Delete (CRUD) / Generic repository, Extending the repository pattern
- Create React App
- about / Create React App, What is Create React App?
- global module, installing / Installing the global module
- creating / Creating a React application
- script, executing / Running the Create React App script
- ejecting / Ejecting the React app
D
- data access layer
- about / Data access layer
- repository pattern / Repository Pattern
- generic repository / Generic repository
- data layer
- abstracting / Abstracting the data layer
- repository pattern, extending / Extending the repository pattern
- functionality, ensuring / Ensuring functionality
- data source
- defining / Defining a data source
- building / Building a data source
- Data Transfer Objects (DTOs) / Models
- DbContext / DbContext
- Dependency Injection
- about / Dependency Injection, Dependency Injection
- static / Static
- singleton / Singleton
- global state / Global state
- wiring / Wire it all up
- Postman / Postman
- Dependency Inversion principle / The Dependency Inversion principle
- dummies / Dummies
- dummy logger
- about / Dummy logger
- example, in C# / Example in C#
- example, in JavaScript / Example in JavaScript
E
- early tests
- gold standard tests / Gold standard tests
- potential outcomes , testing / Testing all potential outcomes
- end-to-end integration tests
- about / End-to-end integration tests
- benefits / Benefits
- detriments / Detriments
- performing / How much end-to-end testing should you do?
- entity framework
- about / Entity Framework
- DbContext / DbContext
- models / Models
- generic repository / Generic repository
- Enzyme
- about / Enzyme
- configuring / Configuring Mocha, Chai, Enzyme, and Sinon
- exception cases testing, Speaker details
- exception cases, testing / Testing exception cases
F
- factories
- used, with FakeRepository / Using factories with the FakeRepository
- soft delete / Soft delete
- fakes
- about / Fakes
- example, in C# / Example in C#
- example, in JavaScript / Example in JavaScript
- FizzBuzz
- about / FizzBuzz, FizzBuzz
- new requirement / A new feature
- number not found error / Number not found
- fragile tests
- about / Fragile tests
- false positives / False positives and false failures
- false failures / False positives and false failures
- abstract DateTime / Abstract DateTime
- front-to-back
- about / Front-to-back
- user interface, defining / Defining a user interface
- business layer, creating / Creating a business layer
- data source, building / Building a data source
- frontend business layer / Front-end business layer
- frontend data source layer / Front-end data source layer
- frontend user interface layer / Front-end user interface layer
- functionality
- ensuring / Ensuring functionality
- speaker, creating / Creating a speaker
- single speaker, obtaining / Getting a single speaker
- multiple speakers, obtaining / Getting multiple speakers
- speaker, updating / Updating a speaker
- speaker, deleting / Deleting a speaker
- future planning / Future planning
G
- generic repository
- used, for reorienting test / Step three – reorient the tests to use the generic repository
- InMemoryRepository Create tests / InMemoryRepository Create tests
- InMemoryRepository Get tests / InMemoryRepository Get tests
- InMemoryRepository GetAll tests / InMemoryRepository GetAll tests
- InMemoryRepository Update tests / InMemoryRepository Update tests
- about / Generic repository
- Gherkin
- Gravatar
- about / Gravatar
- interface / Starting with an interface
- test version of interface, implementing / Implementing a test version of the interface
- production version of interface, implementing / Implementing the production version of the interface
H
- Hello World
- about / Hello World
- requirements / A change in requirements
- good evening feature / Good evening
I
- InMemoryRepository Create tests / InMemoryRepository Create tests
- InMemoryRepository GetAll tests / InMemoryRepository GetAll tests
- InMemoryRepository Get tests / InMemoryRepository Get tests
- InMemoryRepository Update tests / InMemoryRepository Update tests
- inside out
- about / Inside out
- business layer, defining / Defining a business layer
- Integrated Development Environment (IDEs)
- downloading / Downloading the IDE
- about / A quick introduction to JavaScript IDEs
- integration test / Integration tests
- integration test project / Integration test project
- interface
- abstracting / Step one – abstract interface
- Interface Segregation principle / The Interface Segregation principle
- issues
- abstracting / Abstracting away problems
- issues, preventing test addition
- about / Issues that prevent adding tests
- dependence, on framework and third-party code / Direct dependence on framework and third-party code
- Law of Demeter / Law of Demeter
- constructor / Work in the constructor
- global state / Global state
- static methods / Static methods
- large classes and functions / Large classes and functions
- issues, resulting from legacy code
- unintended side effects / Unintended side effects
- over-optimization / Over-optimization
- overly clever code / Overly clever code
- third-party software, tight coupling / Tight coupling to third-party software
J
- JavaScript IDEs
- about / A quick introduction to JavaScript IDEs
- VS Code, installing / Visual Studio Code
- WebStorm / WebStorm
- Create React App / Create React App
- Mocha / Mocha and Chai
- Chai / Mocha and Chai
- code kata, setting up / A quick kata to check our test setup
- Jest / Jest
L
- legacy code
- about / What is legacy code?
- shortcomings / Why does code go bad?
- on project / When does a project become legacy?
- preventing / What can be done to prevent legacy decay?
- resulting issues / Typical issues resulting from legacy code
- Open Closed Principle / Open Closed Principle and legacy code
- Liskov Substitution Principle / Liskov Substitution Principle and legacy code
- inheriting / Inheriting code
- Mastermind game / The game
- change, requesting / A change is requested
- transferring / Life sometimes hands you lemons
- working with / Getting started
- third-party class, abstracting / Abstracting a third-party class
- unexpected input / Unexpected Input
- customizing / Final beautification
- enhancements / Ready for enhancements
- legacy problems
- dealing with / Dealing with legacy problems
- safe refactoring / Safe refactoring
- early tests / Early tests
- Linux, Apache, MySQL, PHP/Perl/Python (LAMP) / Technical requirements
- Liskov Substitution Principle (LSP)
- Long Term Support (LTS) / Installing Node
M
- Mastermind class / Making sense of the madness
- Mocha
- about / Mocha and Chai, Mocha
- configuring / Configuring to use Mocha and Chai, Configuring Mocha, Chai, Enzyme, and Sinon
- mock API service / A mock API service
- mocking frameworks / Mocking frameworks
- mocks
- about / Mocks
- example, in C# / Example in C#
- examples, in JavaScript / Example in JavaScript
- models / Models
- MongoDB, Express, Angular, Node (MEAN) / Technical requirements
N
- .NET Core SDK
- installing / Installing the .NET Core SDK
- VS Code, setting up / Getting set up with VS Code
- N-Tiered
- about / N-Tiered example
- presentation layer / Presentation layer
- moq / Moq
- business layer / Business layer
- N-Tiered divisions
- about / Basic yet effective N-Tiered divisions
- service layer / Service layer
- data access layer / Data access layer
- user interface adapter layer / User interface adapter layer
- N-Tiered hexagonal architecture
- about / An N-Tiered hexagonal architecture, Hexagonal architecture
- N-Tiered divisions / Basic yet effective N-Tiered divisions
- user interface layer / User interface layer
- Node
- about / What is Node?
- need for / Why do we need Node?
- installing / Installing Node
- URL / Installing Node
- installing, for Linux / Linux
- installing, for Mac OSX / Mac OSX
- installing, on Windows / Windows
- Node.js / Node.js
- Node Package Manager (NPM)
- about / NPM, What is NPM?
- need for / Why do we need NPM?
- installing / Installing NPM?
O
- Object-Relational Mapper (ORM) / Entity Framework, Entity Framework
- OCP (Open Closed Principle) / Unintended side effects
P
- PDD (Pain Driven Development) / What can be done to prevent legacy decay?
R
- React app
- creating / Creating a React app
- ejecting / Ejecting the app
- Mocha, configuring / Configuring Mocha, Chai, Enzyme, and Sinon
- Enzyme, configuring / Configuring Mocha, Chai, Enzyme, and Sinon
- Chai, configuring / Configuring Mocha, Chai, Enzyme, and Sinon
- Sinon, configuring / Configuring Mocha, Chai, Enzyme, and Sinon
- React component
- considering / Considering the React component
- Redux testability
- about / Looking at Redux testability
- store / The store
- actions / Actions
- reducers / Reducers
- repository
- genericizing / Genericizing the repository
- interface, abstracting / Step one – abstract interface
- concrete class, abstract / Step two – abstract the concrete class
- test, reorienting for using generic repository / Step three – reorient the tests to use the generic repository
- entity framework / Entity Framework
- repository, Speaker listing
- about / Repository
- IRepository interface / The IRepository interface
- FakeRepository / FakeRepository
- repository calls
- verifying, into DB context / Verifying the repository calls into the DB context
- InMemory database / InMemory database
- speakers, adding to InMemory database / Adding speakers to the InMemory database
- repository pattern
- extending / Extending the repository pattern
- Get method / The Get method
- GetAll method / The GetAll method
- Create method / The Create method
- Delete method / The Delete method
- Update method / The Update method
- Representational State Transfer (REST) / The Create method
- requisites
- reviewing / Reviewing the requirements
S
- safe refactoring
- about / Safe refactoring
- values, converting to variables / Converting values to variables
- method, extracting / Extracting a method
- class, extracting / Extracting a class
- third-party libraries, abstracting / Abstracting third-party libraries and framework code
- framework code, abstracting / Abstracting third-party libraries and framework code
- service, Speaker listing / Service
- service calls
- verifying, through repository / Verify that the service calls the DB through the repository
- ContextFixture / ContextFixture
- service layer
- about / Service layer
- microservices / Microservices
- service test, Speaker listing / Service tests
- Single Page Application (SPA) / What is Speaker Meet?, Technical separations
- Single Responsibility Principle (SRP) / The Single Responsibility Principle
- Sinon
- about / Sinon
- configuring / Configuring Mocha, Chai, Enzyme, and Sinon
- used, to mock Ajax responses / Using Sinon to mock Ajax responses
- existing tests, fixing / Fixing existing tests
- server, mocking / Mocking the server
- soft delete / Soft delete
- Software Development Life Cycle (SDLC) / Big design up front
- SOLID principles
- about / The SOLID principles
- URL / The SOLID principles
- Single Responsibility Principle / The Single Responsibility Principle
- Open/Closed principle / The Open/Closed principle
- Liskov Substitution principle (LSV) / The Liskov Substitution principle
- Interface Segregation principle / The Interface Segregation principle
- Dependency Inversion principle / The Dependency Inversion principle
- Speaker details
- about / Speaker details
- API / API
- API tests / API tests
- API test / API tests
- service / Service
- service test / Service tests
- tests, cleaning / Clean the tests
- repository / More from the repository
- factory work / Additional factory work
- exception cases, testing / Testing exception cases
- Speaker listing
- about / Speaker listing, Speaker listing
- API / API
- factories, used with FakeRepository / Using factories with the FakeRepository
- mock API service / A mock API service
- get all speakers action / The Get All Speakers action
- standard action, testing / Testing a standard action
- thunk, testing / Testing a thunk
- get all speakers reducer / The Get All Speakers reducer
- component / The Speaker listing component
- Speaker Meet
- about / What is Speaker Meet?
- Web API project / Web API project
- Speakers (API), listing / Listing Speakers (API)
- spliting / Breaking down Speaker Meet
- speakers / Speakers
- communities / Communities
- conferences / Conferences
- technical requisites / Technical requirements, Technical requirements
- issues, defining / Defining the problem
- issues, digesting / Digesting the problem
- epics / Epics, features, and stories; oh my!, Epics
- features / Epics, features, and stories; oh my!, Features
- stories / Epics, features, and stories; oh my!, Stories
- backlog, maintaining / Maintain your backlog
- issues / The Speaker Meet problem
- separation / Meaningful separation
- Speaker Meet, separation
- speakers / Speakers
- communities / Communities
- conferences / Conferences
- by team function / Separate by team function
- technical separations / Technical separations
- Speaker Meet, technical requisites
- react web user interface / React web user interface
- .NET Core / .NET Core
- .NET Web API / .NET Web API
- entity framework / Entity Framework
- Azure / Azure
- database / Database
- Speaker Meet application
- changes / Changes to Speaker Meet
- backend, changes / Changes to the back-end
- frontend, changes / Changes to the front-end
- speakers, sorted by rating on client side / Sorted by rating on client side
- changes, implementing / What now?
- premature optimization / Premature optimization
- speakers
- mock API Service, adding / Speaker detail
- Get speaker action / The Get Speaker action
- Get Speaker reducer / The Get Speaker reducer
- Speaker Detail component / The Speaker Detail component
- Speakers (API)
- listing / Listing Speakers (API)
- requisites / Requirements
- test file / A new test file
- spies
- about / Spies
- example, in C# / Example in C#
- example, in JavaScript / Example in JavaScript
- stubs
- about / Stubs
- example, in C# / Example in C#
- example, in JavaScript / Example in JavaScript
T
- TDD expert
- advantages / Rejoining the world as a TDD expert
- mentor, seeking / Seek a mentor
- becoming / Becoming a mentor
- practice / Practice, practice, practice
- test
- types / Different types of test
- unit test / Unit tests
- acceptance test / Acceptance tests
- integration test / Integration tests
- end-to-end test / End to end tests
- requisites / Requirements
- in C# / Our first tests in C#
- application, growing / Growing the application with tests
- in JavaScript / Our first tests in JavaScript
- test, requisites
- about / Why are they important?
- user story / User stories
- Gherkin / Gherkin
- Test-Driven Development (TDD)
- about / First, a little background, John's story on TDD, Clayton's story on TDD, So, what is TDD?, Where to begin, A clean slate, Introducing TDD to your team
- approach / An approach to TDD
- alternative approach / An alternative approach
- process / The process, Red, green, and refactor, Coder's block
- validating / Why should we care?
- arguments / Arguments against TDD, Arguments in favor of TDD
- testing / Testing takes time, Testing is expensive, Testing is difficult, We don't know how, Test small, When testing is painful
- manual testing, reducing / Reduces the effort of manual testing
- bug count, reducing / Reduces bug count
- level of correctness, ensuring / Ensures some level of correctness
- refactoring, removing / Removes the fear of refactoring
- architecture / A better architecture
- development / Faster development
- code, writing / Why does it matter?
- monolithic application, developing / One bite at a time
- Minimum Viable Product / Minimum Viable Product
- recover approach / Different mindset
- method / YAGNI – you aren't gonna need it
- test, executing / Devil's advocate
- negative cases, testing / Test negative cases first
- spike / A spike
- assert / Assert first
- organized / Stay organized
- using / TDD is a personal practice
- permission, avoiding / You don't need permission
- application progress / Grow applications through tests
- not forcing / Don’t force TDD on anyone
- gamification / Gamification of TDD
- benefits, displaying / Showing your team the benefits
- results, reviewing / Review the results
- test doubles / Test doubles
- test double types
- about / Test double types
- dummies / Dummies
- dummy logger / Dummy logger
- stubs / Stubs
- spies / Spies
- mocks / Mocks
- fakes / Fakes
- testing direction
- about / Testing direction
- back-to-front / Back-to-front
- front-to-back / Front-to-back
- inside out / Inside out
- third-party software
- abstracting / Abstracting third-party software
- timely greeting / Timely greeting
- TODO app
- about / TODO app
- mark complete / Mark complete
- tests, adding / Adding tests, Adding tests
- production code / Production code, Production code
- task removal, avoiding / But don't remove from the list!
- type
- quantity / Quantity of each test type
U
- UML (Unified Modeling Language) / When does a project become legacy?
- unit test
- about / Unit tests
- parts / Parts of a unit test
- arrange / Arrange
- act / Act
- assert / Assert
- unsafe refactoring / Free to do unsafe refactoring
- user interface
- adapter layer / User interface adapter layer
- building / Building a user interface
- defining / Defining a user interface
- user interface layer
- about / User interface layer
- frontend business layer / Front-end business layer
- frontend user interface layer / Front-end user interface layer
- frontend data source layer / Front-end data source layer
- user story
- about / User stories
- Role / Role
- Request / Request
- Reason / Reason
V
- Visual Studio Community
- setting up / Setting up Visual Studio Community
- downloading / Downloading Visual Studio Community
- installing / Installing Visual Studio Community
- VS Code
- IDE, downloading / Downloading the IDE
- installing / Installing the VS Code, Installing Visual Studio Code
- extensions, adding / Adding extensions
- project, creating / Creating a project in VS Code
- about / Why Visual Studio Code?
- installing, on Linux / Linux
- installing, on Mac / Mac
- installing, on Windows / Windows
- plugins, installing / Installing the plugins you will need
- testing environment, configuring / Configuring the testing environment
W
- Web API project / Web API project
- WebStorm
- about / WebStorm, Why WebStorm?
- installing / Installing WebStorm
- installing, on Linux / Linux
- installing, on Mac / Mac
- installing, on Windows / Windows
- plugins, installing / Installing the plugins you will need
- testing environment, configuring / Configuring the testing environment
X
- xUnit
- switching / Switching to xUnit
- code kata / Code katas
- test project, creating / Creating the test project
- Given3ThenFizz test / The Given3ThenFizz test
- Given5ThenBuzz test / The Given5ThenBuzz test
- Given15ThenFizzBuzz test / The Given15ThenFizzBuzz test
- Given1Then1 test / The Given1Then1 test
- theories / Theories
- FizzBuzz Problem, solution / Solution to the FizzBuzz Problem
Y
- yak shaving
- about / Yak shaving
- big design / Big design up front