#reactjs #enzyme #react-context
#reactjs #фермент #реагировать-контекст
Вопрос:
Я реализовал контекст :
import { createContext } from "react"
const initialState = {
type: "info",
visibile: true,
setVisible: () => { },
darkmode: false
}
const context = createContext(initialState)
export default context
Но когда я хочу протестировать его с помощью Enzyme, я запутался в том, что я должен тестировать и как это точно протестировать?
Ответ №1:
Я использую его следующим образом,
Файл контекста,
import React, { useState, createContext } from "react"
const initialState = {
type: "info",
visibile: true,
darkmode: false
}
export const Context = createContext()
export function Provider({ children }) {
const [state, setState] = useState(initialState)
// using like this gives me ability to provide
// a function that can change the context data
const setVisible = val => setState({ ...state, visibile: val })
return (
<Context.Provider value={{ ...state, setVisible }}>
{children}
</Context.Provider>
)
}
в Provider (используя FunctionalComponent),
import React from "react";
import { Provider as ContextProvider } from './context.jsx'
import SomeComponent from './Consumer'
import SomeComponent2 from './Consumer2'
export default function App() {
return (
<ContextProvider>
<div>
<SomeComponent />
blah blahblah blahblah blahblah blahblah blah
<SomeComponent2 />
</div>
</ContextProvider>
);
}
в Consumer (используя FunctionalComponent),
import React, { useEffect, useContext } from 'react'
import { Context } from './context'
export default function SomeComponent() {
const contextData = useContext(Context)
useEffect(() => {
const timer = setInterval(() => {
contextData.setVisible(!contextData.visibile)
}, 1000)
return () => clearInterval(timer)
}, [contextData])
return (
<div>
<h2> Consumer 1 (Consuming amp; Changing) </h2>
<pre>{JSON.stringify(contextData, null, 4)}</pre>
</div>
)
}
Предполагая, что вы хотите, как использовать контекст
Комментарии:
1. Что ж, ваш ответ улучшил контекст, но в моем вопросе я говорил о модульном тестировании.
2. Но как ваш потребитель получает ценность от поставщика ?