我正在使用React JS构建一个web应用程序。我正在使用Cypress为我的应用程序编写集成测试。在我的测试中,我从fixture文件读取JSON数据。当我读取fixture文件时,它抛出以下错误:
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有它自己的同步类型(命令队列模型),所以你也不能这样做
// won't work
const loginResponseJson = await cy.fixture('superadmin-login.json')
如果你想最小化.then()
回调,你可以在规格的顶部require
它。
const loginResponseJson = require('./cypress/fixtures/superadmin-login.json')
首先加载fixture,然后拦截请求并返回模拟响应。
cy.fixture('car/cars.json').then(cars => {
cy.intercept('GET', '/api/cars?limit=100', cars)
})