CodeWithMMAK
Test AutomationIntermediate

Protractor, Jasmine, and TypeScript: The Definitive Automation Guide

Build a modern, type-safe end-to-end test automation framework for Angular applications using Protractor, Jasmine, and TypeScript.

CodeWithMMAK
December 19, 2018
10 min

Introduction

🎯 Quick Answer

Protractor with TypeScript provides a robust, type-safe environment for testing Angular applications. By using TypeScript, you get better IDE support, autocompletion, and compile-time error checking. To set up the framework, you need to install Node.js, initialize a project with npm init, install protractor, jasmine, and typescript, and configure a tsconfig.json to compile your TypeScript code into JavaScript that Protractor can execute.

Protractor is an end-to-end (e2e) test framework for Angular and AngularJS applications. It runs tests against your application in a real browser, interacting with it as a user would. While it's built on top of WebDriverJS, it adds specialized locators and automatic synchronization for Angular's asynchronous nature.

📖 Key Definitions

TypeScript

A strongly typed superset of JavaScript that compiles to plain JavaScript, offering better tooling and code maintainability.

tsconfig.json

A configuration file that specifies the root files and the compiler options required to compile a TypeScript project.

Type Definitions (@types)

Packages that provide type information for JavaScript libraries (like Jasmine), enabling autocompletion and type checking in TypeScript.

Transpilation

The process of converting TypeScript code into JavaScript code so it can be executed by the browser or Node.js.

Building the Framework

Let's go through the step-by-step process of creating an automation framework using Protractor, Jasmine, and TypeScript.

🚀 Step-by-Step Implementation

1

Initial Setup

Install Node.js and VS Code. Create a new project folder and run npm init -y.

2

Install Core Packages

Install Protractor, Jasmine, and TypeScript along with their type definitions:

Code Snippet
npm install --save-dev protractor jasmine typescript @types/jasmine @types/node
3

Configure TypeScript

Create a tsconfig.json file to manage your compilation settings. Ensure module is set to commonjs and target is es6.

Code Snippet
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "outDir": "dist",
    "sourceMap": true
  }
}
4

Create Protractor Config

Create a conf.ts file. Note that you'll need to compile this to conf.js before running, or use ts-node to run it directly.

Code Snippet
import { Config } from 'protractor';

export let config: Config = {
  directConnect: true,
  capabilities: { 'browserName': 'chrome' },
  framework: 'jasmine',
  specs: ['./specs/**/*.spec.js'], // Point to compiled JS files
  onPrepare: () => {
    // Initialization logic
  }
};
5

Write and Run Tests

Write your tests in .ts files, compile them using tsc, and then run protractor dist/conf.js.

Common Errors & Best Practices

⚠️ Common Errors & Pitfalls

  • Missing Type Definitions

    If you see errors like "Cannot find name 'describe'", you likely forgot to install @types/jasmine.

  • Compilation Out of Sync

    Running tests against old .js files after changing .ts files. Always run tsc before running your tests.

  • WebDriver-Manager Update Required

    If the browser fails to launch, run npx webdriver-manager update to sync your drivers with your browser version.

Best Practices

  • Use Interfaces to define the structure of your test data and Page Objects for better type safety.
  • Leverage Async/Await exclusively. Disable the Protractor control flow in your config for a more modern and stable execution.
  • Keep your Compiled Code separate from your source code by using an outDir like dist in your tsconfig.json.
  • Use ts-node in your configuration to avoid the manual compilation step during development.

Frequently Asked Questions

Why use TypeScript with Protractor?

TypeScript catches errors during development rather than at runtime, and provides superior autocompletion for Protractor's API.

Can I test non-Angular apps with TypeScript?

Yes, simply use browser.waitForAngularEnabled(false) in your onPrepare or within specific tests.

How do I fix 'Could not find update-config.json' error?

Run npx webdriver-manager update to download the necessary binaries. See the full guide here.

Conclusion

Integrating TypeScript into your Protractor framework significantly enhances the developer experience and code quality. By providing a structured, type-safe environment, you can build complex test suites that are easier to debug and maintain over time.

📝 Summary & Key Takeaways

This guide explored the integration of TypeScript into a Protractor and Jasmine test automation framework. We covered the essential setup steps, including dependency installation, TypeScript configuration via tsconfig.json, and the creation of a type-safe configuration file. Key advantages highlighted include improved IDE support, early error detection through transpilation, and better code organization using modern JavaScript features like async/await. By following best practices such as separating source and compiled files and maintaining updated WebDriver binaries, teams can leverage the full power of TypeScript to build resilient and scalable end-to-end test suites for Angular applications.

Share it with your network and help others learn too!

Follow me on social media for more developer tips, tricks, and tutorials. Let's connect and build something great together!