iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Modern Web

【 我不會寫 React Component 】系列 第 29

如何導入 cypress 【 我不會寫 React Component 】

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20221012/20107239bA4EDwDDxY.jpg

因為這邊開發的是 Component,所以這次會用 Cypress Component Testing

Setup

設置專案在 apps/ 底下。

E2E 專案 可以放在對應 application 專案底下 或是 像這次是獨立放,
端看團隊習慣。

# move to apps/ folder
cd apps

# create new folder call e2e/ for end-to-end testing
mkdir e2e && cd $_

# init project
yarn init -y
  • package.json
{
  "name": "e2e",
  "version": "0.0.0",
  "private": true,
  "devDependencies": {
    "carousel": "*",
    "tsconfig": "*",
    "cypress": "latest",
    "react-scripts": "latest",
    "ts-loader": "latest",
    "typescript": "latest",
    "webpack": "latest"
  },
  "browserslist": "defaults"
}
  • tsconfig.json
{
  "extends": "tsconfig/nextjs.json",
  "compilerOptions": {
    "types": ["cypress", "node"]
  },
  "include": ["."]
}

接著,執行 cypress

yarn cypress open

選擇測試的項目。
Choose-Test

選擇框架類型。
Set-up

cypress 會幫你配置需要安裝的套件。
Install

自動生成基礎配置。
Config

選擇測試的瀏覽器。
Choose-Browser

建立空的規格。
empty-spec

我們用 carousel 來進行測試。
carousel-spec

開啟規格。
start-spec

看到這樣就表示成功運行規格了。
open-spec

Mount

使用 turborepo 時,標注 "*" 的套件表示是內部套件,
內部套件可以直接使用 typescript,
但在 cypress 沒辦法直接編譯,
我們要用 webpack 幫我們處理 ts 編譯的部分。

  • webpack.config.ts
export default {
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: "ts-loader",
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
    extensions: [".tsx", ".ts", ".js"],
  },
};
  • cypress.config.ts
import { defineConfig } from "cypress";
import webpackConfig from "./webpack.config";

export default defineConfig({
  component: {
    devServer: {
      framework: "create-react-app",
      bundler: "webpack",
      webpackConfig,
    },
  },
});

接著,我們試著運行 carousel 試試看。

  • Carousel.cy.tsx
import { Carousel } from "carousel";

describe("Carousel.cy.ts", () => {
  it("mount", () => {
    cy.mount(
      <Carousel aria-label="Highlighted television shows" interval={10_000}>
        <Carousel.Button action="toggle">
          {(auto_rotation) =>
            auto_rotation ? "pause auto-rotation" : "start auto-rotation"
          }
        </Carousel.Button>
        <Carousel.Button action="next">next slide</Carousel.Button>
        <Carousel.Button action="prev">previous slide</Carousel.Button>
        <Carousel.Items>
          <Carousel.Item>
            Dynamic Europe: Amsterdam, Prague, Berlin
          </Carousel.Item>
          <Carousel.Item>Travel to Southwest England and Paris</Carousel.Item>
          <Carousel.Item>
            Great Children's Programming on Public TV
          </Carousel.Item>
          <Carousel.Item>Foyle’s War Revisited</Carousel.Item>
          <Carousel.Item>Great Britain Vote: 7 pm Sat.</Carousel.Item>
          <Carousel.Item>
            Mid-American Gardener: Thursdays at 7 pm
          </Carousel.Item>
        </Carousel.Items>
      </Carousel>
    );
  });
});

carousel-in-cypress


上一篇
如何導入 deque axe 【 我不會寫 React Component 】
下一篇
結語【 我不會寫 React Component 】
系列文
【 我不會寫 React Component 】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言