Reading fixture is throwing error TypeError: Converting circular structure to JSON

Reading fixture is throwing error TypeError: Converting circular structure to JSON

我正在使用 React JS 构建 Web 应用程序。我正在为我的应用程序使用 Cypress 编写集成测试。在我的测试中,我正在从夹具文件中读取 JSON 数据。当我读取夹具文件时,它抛出以下错误。

TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Window'
    --- property 'window' closes the circle

这是我的代码。

describe('Login', () => {
    it('renders login form render the form controls', () => {

    it('redirects to dashboard page when login is successful', () => {
        // TODO: use fixture
        // TODO: give alias
        // TODO: mock me endpoint
        const accessToken = 'fake access token'
        const loginResponseJson = cy.fixture('superadmin-login.json');

    })
})

这是我的 superadmin-login.json 夹具文件。

{
  "accessToken": "fake access token",
  "token": {
    "id": "c09dd33fbdcbf780ddb4d784002f1b4c8413cc298f2465f5f3e3c3481b2aa7f586d14f04af163a1c",
    "user_id": 31,
    "client_id": 1,
    "name": "User Access Token",
    "scopes": [],
    "revoked": false,
    "created_at": "2022-05-24 20:39:48",
    "updated_at": "2022-05-24 20:39:48",
    "expires_at": "2025-05-24T20:39:48.000000Z"
  }
}

我的代码有什么问题,我该如何解决?

读取 fixture 文件是一个异步操作,所以这应该适合你

cy.fixture('superadmin-login.json').then(loginResponseJson => {
  const token = loginResponseJson.token;
  ...
})

请注意,Cypress 有自己的 a-synchronicity 类型(command-queue 模型),因此您也不能这样做

// won't work
const loginResponseJson = await cy.fixture('superadmin-login.json')

如果您想最大程度地减少 .then() 回调,您可以 require 将它放在规范的顶部。

const loginResponseJson = require('./cypress/fixtures/superadmin-login.json')

首先加载夹具然后拦截请求和return模拟响应工作

 cy.fixture('car/cars.json').then(cars => {
  cy.intercept('GET', '/api/cars?limit=100', cars)
})