Cypress 测试框架与 TypeScript 的集成指南

在开发生产级应用程序时,测试是不可或缺的一部分。有多种测试框架可以提高QA的效率。最近,有机会在新开发的产品上尝试Cypress框架。Cypress是一个JavaScript测试框架,它在浏览器中运行,因此能够非常好地模拟真实客户端的行为。可以用它编写GUI和API测试,并且它提供了许多有趣的特性。

作为一名全栈开发者,习惯于从后端语言中使用类型安全的代码,因此在前端开发中也使用TypeScript类型的扩展。也认为对于端到端测试来说,拥有类型安全的代码是必要的。在官方Cypress网站上,有链接到可能的TypeScript设置,但在写这篇文章的时候,这些教程并不完全可用。它们不允许在测试本身的源代码映射中进行调试

本文描述了如何创建一个测试项目,允许在TypeScript源文件中编写和完全调试。

创建项目

首先,使用命令初始化npm项目:

npm init

现在安装:

cypress -测试框架 typescript -TypeScript编译器 ts-loader -TypeScript源代码的加载器 webpack - 构建工具 @cypress/webpack-preprocessor - 使用webpack进行文件预处理的插件 npm i cypress typescript ts-loader webpack @cypress/webpack-preprocessor --save

这些是所需的所有包。

配置TypeScript

要配置TypeScript,请在项目的根目录创建tsconfig.json:

{ "compilerOptions": { "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "noEmitHelpers": true, "noImplicitAny": true, "strictPropertyInitialization": true, "preserveConstEnums": false, "target": "es5", "lib": ["es5", "dom", "es2015.core", "es2015.promise", "es2015.iterable", "es2015.collection"], "types": ["cypress"], "sourceMap": true, "reactNamespace": "b", "removeComments": false, "skipLibCheck": true, "skipDefaultLibCheck": true }, "include": ["**/*.ts"] }

这个例子包含了类型安全最严格的限制。

配置webpack

测试项目的构建工具是webpack。要配置它,请创建webpack.config.js:

module.exports = { resolve: { extensions: [".js", ".ts", ".d.ts"] }, module: { rules: [ { test: /\.ts$/, use: [ { loader: "ts-loader", options: { allowTsInNodeModules: true } } ] } ] }, mode: "development" };

配置Cypress

Cypress插件用于Webpack预处理

要使用@cypress-webpack-preprocessor,请将cypress/plugins/index.js更改为如下:

const webpack = require("@cypress/webpack-preprocessor"); module.exports = (on, config) => { const options = { webpackOptions: require("../../webpack.config"), watchOptions: {} }; on("file:preprocessor", getWepPackWithFileChange(options)); }; function getWepPackWithFileChange(options) { const webPackPreProcessor = webpack(options); return function(file) { file.outputPath = file.outputPath.replace(".ts", ".js"); return webPackPreProcessor(file); }; }

这是最重要的部分,因为这允许编译并获得调试的源代码映射,无论是cypress命令还是spec文件。

将Cypress支持文件转换为TS

将support/commands.js重命名为cypress/support/commands.ts,并添加以下自定义cy命令:

declare namespace Cypress { interface Chainable { customCommand(): Cypress.Chainable; } } Cypress.Commands.add("customCommand", (): Cypress.Chainable => { return cy.log("TEST LOG"); });

现在将support/index.js重命名为cypress/support/index.ts,并确保它包含以下内容:

import "./commands";

Cypress

最后,将主cypress配置在cypress.json中更改为使用TypeScript spec和support文件:

{ "testFiles": "**/*.spec.ts", "pluginsFile": "cypress/plugins/index.js", "supportFile": "cypress/support/index.ts" }

测试

现在可以在cypress/integration文件夹中定义一个简单的测试,例如cypress/integration/examples/test.spec.ts:

describe("Example", () => { it("test", () => { const testString = "test-string"; debugger; // Just to break running tests for debugging - this should be removed // in final code cy.wrap(testString) .should("exist", testString) .customCommand(); }); });

现在可以像往常一样运行cypress测试:

npx cypress open

可以看到test.spec.ts在测试列表中。如果现在打开开发者工具运行测试,调试器将在debugger行停止。这是为了停止执行。之后,调试器也会在断点处停止。注意,调试是直接在test.spec.ts中,也就是原始的TypeScript代码中。也可以调试命令。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485