Rub*_*con 7 javascript testing unit-testing reactjs jestjs
我有以下组件:
应用程序.js
import React from "react";
import { Slider } from "./Slider";
function App() {
return (
<div className="App">
<header className="App-header">
<Slider />
</header>
</div>
);
}
export { App };
Run Code Online (Sandbox Code Playgroud)
滑块.jsx
import {Virtual, Navigation} from 'swiper';
import {Swiper, SwiperSlide} from 'swiper/react';
export const Slider = ({meetings = []}) => {
const rerenderSwiperKey = useMemo(() => Date.now(), [meetings.length]);
const lessThanThree = meetings.length < 3;
const lessThanTwo = meetings.length < 2;
return (
<Swiper
key={rerenderSwiperKey}
navigation={{
nextEl: '.swiper-button.next',
prevEl: '.swiper-button.prev',
}}
spaceBetween={24}
slidesPerView={3}
simulateTouch={false}
breakpoints={{
0: {
slidesPerView: 1,
},
900: {
slidesPerView: lessThanTwo ? 1 : 2,
},
1200: {
slidesPerView: lessThanThree ? (lessThanTwo ? 1 : 2) : 3,
},
}}
modules={[Virtual, Navigation]}
virtual>
{meetings.map((meeting, index) => (
<SwiperSlide key={meeting.id} virtualIndex={index}>
<Slide>{meeting}</Slide>
</SwiperSlide>
))}
</Swiper>
);
}
Run Code Online (Sandbox Code Playgroud)
然后我有以下测试文件:
应用程序.test.js
import React from "react";
import { shallow } from "enzyme";
import { App } from "../../App";
import { Slider } from "../../Slider";
describe("App page", () => {
it("render: learn react link", () => {
const component = shallow(<App />);
const buttons = component.find(Slider);
expect(buttons.length).toBe(1);
});
});
Run Code Online (Sandbox Code Playgroud)
和以下配置jest.config.js:
const { defaults } = require("jest-config");
module.exports = {
moduleFileExtensions: [...defaults.moduleFileExtensions, "js"],
setupFiles: ["<rootDir>/src/__test__/setupTests.js"],
setupFilesAfterEnv: ["<rootDir>/src/__test__/setupTestsAfterEnv.js"],
testPathIgnorePatterns: ["<rootDir>/node_modules/"],
moduleNameMapper: {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
"./__mocks__/fileMock.js",
},
};
Run Code Online (Sandbox Code Playgroud)
问题是:当我运行时yarn test- 它会产生以下错误:
~/Downloads/jest-esm-issue/node_modules/swiper/swiper.esm.js:13
export { default as Swiper, default } from './core/core.js';
^^^^^^
SyntaxError: Unexpected token 'export'
> 1 | import {Virtual, Navigation} from 'swiper';
| ^
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我了解如何解决它吗?这是一个演示示例项目https://github.com/DaveLomber/jest-esm-issue
显然这与您正在使用的 swiper 库的解决方法有关。参考: https: //swiperjs.com/react#usage-with-create-react-app
在 slider.jsx 中,swiper使用直接导入进行导入
import {Swiper, SwiperSlide} from 'swiper/react/swiper-react.js';
// ref: https://swiperjs.com/react#usage-with-create-react-app
Run Code Online (Sandbox Code Playgroud)
然后你还需要在 jest.config.js 文件中添加transformandtransformIgnorePatterns
transform: {
"^.+\\.[t|j]sx?$": "babel-jest"
},
transformIgnorePatterns: ["node_modules/(?!swiper|ssr-window|dom7).*/"]
Run Code Online (Sandbox Code Playgroud)
我并不是 100% 熟悉 create-react-app,但我认为这可以让你到达你想要的地方。完整的笑话配置文件如下所示:
const { defaults } = require("jest-config");
module.exports = {
moduleFileExtensions: [...defaults.moduleFileExtensions, "js"],
setupFiles: ["<rootDir>/src/__test__/setupTests.js"],
setupFilesAfterEnv: ["<rootDir>/src/__test__/setupTestsAfterEnv.js"],
testPathIgnorePatterns: ["<rootDir>/node_modules/"],
moduleNameMapper: {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
"./__mocks__/fileMock.js",
},
transform: {
"^.+\\.[t|j]sx?$": "babel-jest"
},
transformIgnorePatterns: ["node_modules/(?!swiper|ssr-window|dom7).*/"]
};
Run Code Online (Sandbox Code Playgroud)
祝你好运 !
| 归档时间: |
|
| 查看次数: |
7831 次 |
| 最近记录: |