【发布时间】:2021-10-21 10:36:06
【问题描述】:
我需要从 sass 中测试一个组件的样式,但是在 dom 中只加载了内联样式
我的测试用例:
describe('Danger', () => {
const dangerLabel = <DangerLabel>TESTE</DangerLabel>;
it('deve ter class -danger', () => {
const { container } = render(dangerLabel);
expect(container.firstChild).toHaveClass('-danger');
});
it('deve ter a cor vermelho', () => {
const { container } = render(dangerLabel);
const style = window.getComputedStyle(container.firstElementChild);
expect(style.backgroundColor).toBe('#e74c3c');
});
});
笑话配置
module.exports = {
roots: ['<rootDir>'],
transform: {
'\\.(js|jsx)?$': 'babel-jest',
},
testMatch: [
'<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}',
],
moduleFileExtensions: ['js', 'jsx', 'json', 'node'],
testPathIgnorePatterns: ['/node_modules/', '/public/'],
setupFilesAfterEnv: [
'@testing-library/jest-dom/extend-expect',
],
moduleNameMapper: {
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/config/jest/__mocks__/fileMock.js',
'.+\\.(css|scss)$': 'identity-obj-proxy',
},
};
组件导出:
import LabelContainer from './label_container';
import Label from './DefaultLabel';
import DangerLabel from './DangerLabel';
import PrimaryLabel from './PrimaryLabel';
import WarningLabel from './WarningLabel';
import SuccessLabel from './SuccessLabel';
import InfoLabel from './InfoLabel';
import '../assets/styles/label.scss';
export default Label;
export {
LabelContainer,
PrimaryLabel,
DangerLabel,
WarningLabel,
SuccessLabel,
InfoLabel,
};
执行:
expect(received).toBe(expected) // Object.is equality
Expected: "#e74c3c"
Received: ""
30 | const { container } = render(dangerLabel);
31 | const style = window.getComputedStyle(container.firstElementChild);
> 32 | expect(style.backgroundColor).toBe('#e74c3c');
| ^
33 | });
34 | });
35 |
我已经尝试了一些类似 jest-transform-css 和 jest-transform-scss 的包,但是没有成功,可以做那个测试吗?
根据要求 危险标签代码:
import React from 'react';
import DefaultLabel from './DefaultLabel';
const DangerLabel = props => (
<DefaultLabel {...props} className="-danger" />
);
export default DangerLabel;
使用 toHaveStyle:
it('deve ter a cor vermelho', () => {
const { container } = render(dangerLabel);
expect(container.firstElementChild).toHaveStyle(`
background-color: rgb(231, 76, 60)};
`);
});
结果:
【问题讨论】:
-
能否在说明中也包含
DangerLabel的代码? -
确定@ypahalajani,完成
-
图片中的代码和你添加的代码不一样
标签: reactjs sass jestjs react-testing-library