Using software (separate to software being tested) to execute tests that verify program is running as expected.
Generate keystrokes / mouse clicks
Observe changes in User Interface
Testing individual methods in code
Responses from external services
Write tests with different granularity
Fewer high-level tests
Save time over manual regression testing
Brings testing earlier in development cycle
Test cases written before development
Faster feedback
Earlier detection of errors
Potential benefits
Less time spent on repetitive tasks
Javascript E2E testing framework
Real time reloading of test files
Automatic waiting - no explicit waits
Not Selenium
Automatically take screenshots / videos
Time travel
As an IT user
I want to use integrated authentication
So that it works seamlessly with my existing Windows/Okta account
It shows search on home page when logging in with a valid username and password
It does not show search on home page when logging in with a valid username and password
Test cases
Cypress scripting
cy.visit(route)
Visit a route (defined in Angular code)
cy.get(element)
Focus on a particular DOM element
cy.get(element).type(text)
Type into the element (if it's a text box)
cy.get(element).click()
Click the element (if it's a button)
Cypress scripting
cy.get(element).should('exist')
Cypress scripting
Assertions
cy.get(element).should('not.exist')
Gherkin scripting
With Cucumber preprocessor
describe ('Login tests', function() {
it('Shows search on home page when logging in with valid username / password', function() {
cy.server();
cy.route('POST', 'api/v1/authn').as('login');
cy.route('GET', 'oauth2/default/v1/keys').as('authorise');
cy.visit('login');
cy.get('[id="okta-signin-username"]').type('davek@cccs.co.uk');
cy.get('[id="okta-signin-password"]').type('t3mppassw0rd!');
cy.get('[id="okta-signin-submit"]').click();
cy.wait('@login');
cy.wait('@authorise');
cy.visit('/');
cy.get('app-search').should('exist');
})
Feature: Authorisation
Background:
Given Im on the login screen
Scenario: I log in
When I enter the username "dave.kane@cccs.co.uk"
When I enter the password "t3mppassw0rd!"
When I press the login button
Then I log in
Scenario: I dont log in
When I enter the username "dave.kane@cccs.co.uk"
When I enter the password "bollocks!"
When I press the login button
Then I dont log in
Given('I'm on a page', () => {
cy.visit('page')
});
When('I enter the text {string}', (text) => {
cy.get('box').type(text)
});
Doesn't currently support IE
Currently doesn't play nice with Okta
Paid version
Less support than Protractor, etc.