parent
c93539a268
commit
94c4023436
@ -1,7 +0,0 @@
|
|||||||
import { getCityList } from 'redux/actions/getFavoriteCity';
|
|
||||||
|
|
||||||
describe("Actions tests", () => {
|
|
||||||
it('should create an action with FETCH_FAVORITE_CITY type', () => {
|
|
||||||
expect(getFavoriteCity().toEqual({type: 'FETCH_FAVORITE_CITY'}));
|
|
||||||
})
|
|
||||||
})
|
|
@ -0,0 +1,50 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {expect} from '@jest/globals';
|
||||||
|
import NounoursListItem from "../components/NounoursListItem";
|
||||||
|
import {Provider} from "react-redux";
|
||||||
|
import {configureStore} from "@reduxjs/toolkit";
|
||||||
|
import {fireEvent, render, screen} from '@testing-library/react-native'
|
||||||
|
import '@testing-library/jest-native/extend-expect';
|
||||||
|
import testReducer from "./testReducer";
|
||||||
|
|
||||||
|
|
||||||
|
// To wait for things like animation to be fully loaded.
|
||||||
|
jest.useFakeTimers();
|
||||||
|
|
||||||
|
// Configure store for testing purpose
|
||||||
|
const store = configureStore({
|
||||||
|
reducer: {
|
||||||
|
appReducer: testReducer,
|
||||||
|
},
|
||||||
|
middleware: (getDefaultMiddleware) =>
|
||||||
|
getDefaultMiddleware({
|
||||||
|
serializableCheck: false
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// When using a Data Provider (like redux) in your App, you will need to wrap all your tested component into a test Provider
|
||||||
|
// You cannot use the exact same provider and store you create in App.tsx file because here you want mocked data into your store
|
||||||
|
const Wrapper = ({children}) => (<Provider store={store}>{children}</Provider>);
|
||||||
|
|
||||||
|
describe('<NounoursListItem />', () => {
|
||||||
|
test('Assert displayed values', () => {
|
||||||
|
const expectedNounoursInfos = store.getState().appReducer.nounours[0];
|
||||||
|
|
||||||
|
render(<Wrapper>
|
||||||
|
<NounoursListItem item={expectedNounoursInfos}/>
|
||||||
|
</Wrapper>)
|
||||||
|
|
||||||
|
// Get displayed text component and assert that its value contains our nounours name
|
||||||
|
expect(screen.getByTestId('nounours-name')).toHaveTextContent(expectedNounoursInfos.name)
|
||||||
|
expect(screen.getByTestId('nounours-nbPoils')).toHaveTextContent(expectedNounoursInfos.nbPoils)
|
||||||
|
expect(screen.getByTestId('nounours-age')).toHaveTextContent(expectedNounoursInfos.age)
|
||||||
|
|
||||||
|
expect(screen.getByTestId("nounours-image")).toHaveProp("source", {uri: expectedNounoursInfos.image})
|
||||||
|
|
||||||
|
let nounoursListSize = store.getState().appReducer.nounours.length;
|
||||||
|
// Use @testing-library to press our "delete" button
|
||||||
|
fireEvent.press(screen.getByTestId("remove-button"))
|
||||||
|
// Make sure that this press action has delete our nounours from our current state (in our test store).
|
||||||
|
expect(store.getState().appReducer.nounours.length).toBe(nounoursListSize - 1)
|
||||||
|
})
|
||||||
|
});
|
@ -0,0 +1,22 @@
|
|||||||
|
import { FAVORITE_CITY_DATA, WEATHER_DATA } from "../data/stub";
|
||||||
|
import appReducer from "../redux/reducers/appReducer"
|
||||||
|
|
||||||
|
describe('test reducer', () => {
|
||||||
|
let initialState = {
|
||||||
|
weatherListSearched : [],
|
||||||
|
favoriteWeather : null,
|
||||||
|
favoriteCity : null,
|
||||||
|
weatherList : []
|
||||||
|
}
|
||||||
|
it('should return initial state', () => {
|
||||||
|
expect(appReducer(undefined, {})).toEqual(initialState);
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should handle favorite city', () => {
|
||||||
|
expect(appReducer(initialState, {type : 'FETCH_FAVORITE_CITY', FAVORITE_CITY_DATA})).toEqual({weatherList : [], favoriteCity : FAVORITE_CITY_DATA})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should handle weather', () => {
|
||||||
|
expect(appReducer(initialState, {type : 'FETCH_WEATHER', WEATHER_DATA})).toEqual({weatherList : [WEATHER_DATA], favoriteCity : null})
|
||||||
|
})
|
||||||
|
})
|
@ -1,5 +1,22 @@
|
|||||||
|
import { ExclusiveGesture } from 'react-native-gesture-handler/lib/typescript/handlers/gestures/gestureComposition';
|
||||||
|
import { City, FAVORITE_CITY_DATA, WEATHER_DATA } from '../data/stub';
|
||||||
|
import { getFavoriteCity } from '../redux/actions/getFavoriteCity';
|
||||||
|
import { setFavoriteCity } from '../redux/actions/setFavoriteCity';
|
||||||
|
import { setWeather } from '../redux/actions/setWeather';
|
||||||
|
|
||||||
describe("Actions tests", () => {
|
describe("Actions tests", () => {
|
||||||
it('should create an action with FETCH_FAVORITE_CITY type', () => {
|
it('should create an action with FETCH_FAVORITE_CITY type', () => {
|
||||||
expect(getFavoriteCity().toEqual({type: 'FETCH_FAVORITE_CITY'}));
|
const expectation = {
|
||||||
|
type : 'FETCH_FAVORITE_CITY',
|
||||||
|
payload : FAVORITE_CITY_DATA
|
||||||
|
}
|
||||||
|
expect(setFavoriteCity(FAVORITE_CITY_DATA)).toEqual(expectation);
|
||||||
|
})
|
||||||
|
it('should create an action with FETCH_WEATHER type', () => {
|
||||||
|
const expectation = {
|
||||||
|
type : 'FETCH_WEATHER',
|
||||||
|
payload : WEATHER_DATA
|
||||||
|
}
|
||||||
|
expect(setWeather(WEATHER_DATA)).toEqual(expectation);
|
||||||
})
|
})
|
||||||
})
|
})
|
@ -0,0 +1,14 @@
|
|||||||
|
import {WEATHER_DATA} from '../data/stub';
|
||||||
|
import appReducer from "../redux/reducers/appReducer";
|
||||||
|
|
||||||
|
// Mock values used in tests
|
||||||
|
const initialState = {
|
||||||
|
weatherList: WEATHER_DATA, //Here you defined a static list loaded in the initial state. In your real store, this list is usually empty.
|
||||||
|
favoriteCity: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reducer for tests => Just call the "true" reducer with our mocked data as initial state
|
||||||
|
// @ts-ignore
|
||||||
|
export default testReducer = (state = initialState, action) => {
|
||||||
|
return appReducer(initialState, action);
|
||||||
|
}
|
Loading…
Reference in new issue