免責(zé)聲明;我對 react-testing-library(一直使用公認(rèn)的舊版 Enzyme)和 Apollo Query/MockedProvider 組件(通過 JS 服務(wù)對象使用客戶端)有點(diǎn)陌生,所以這可能是一個愚蠢的問題.. .我有一個組件可以接收我嘗試為其編寫測試的國家/地區(qū)列表。我想做的是:import React from 'react';import { MockedProvider } from '@apollo/react-testing';import { render, act } from '@testing-library/react';import wait from 'waait';import Countries, { countryQuery } from './Countries';import { isTerminating } from 'apollo-link/lib/linkUtils';當(dāng)它運(yùn)行時,第二個測試(關(guān)于加載狀態(tài))失敗,因?yàn)榇藭r組件看起來只是一個 body 標(biāo)簽。我嘗試將 beforeAll 更改為 beforeEach,但這只是生成了一個帶有錯誤指示器的組件。我在組件中放置了一些 console.log 語句,這就是它們向我展示的內(nèi)容:console.log src/components/Countries.js:45 Loading is: true console.log src/components/Countries.js:46 Error is: undefined console.log src/components/Countries.js:45 Loading is: false console.log src/components/Countries.js:46 Error is: Error: Network error: No more mocked responses for the query: { countries { name phone __typename } } , variables: {}我想知道它是否不喜歡作為 MockedProvider 的模擬屬性傳入的空數(shù)組。但是我見過的每個例子都是這樣的,所以......作為一項(xiàng)實(shí)驗(yàn),我在規(guī)范文件中添加了第二組測試,以查看導(dǎo)致問題的組件是否只是一個奇怪的計(jì)時問題。這是第二個測試:describe('and the component has data', () => { let component; beforeAll(async (done) => { await act(async () => { component = render( <MockedProvider mocks={mocks} addTypename={false}> <Countries /> </MockedProvider> ); await wait(0); }); done(); }); it('should have a title', () => { expect(component.getByText('Countries Component')).not.toBeUndefined(); }); it('should have a loading status', () => { expect(component.getByText(mockCountryName)).not.toBeUndefined(); }); });這有同樣的問題;第一個測試有效(如果我重新排序測試,第一個總是有效的測試)但第二個失敗,并且組件似乎是一個空的 body 標(biāo)簽。有沒有辦法讓這種類型的測試結(jié)構(gòu)起作用?我不喜歡將所有內(nèi)容都放在一個測試中的想法,更不用說組件的設(shè)置代碼了。
Apollo MockedProvider 測試問題(我渲染的組件不斷消失)
蕪湖不蕪
2021-09-30 15:10:05