2017-11-14 17 views
5

में रिक्त है मैं एक घटक है:आयातित शैलियों आपत्ति जेस्ट

describe('Test suite',() => { 
    test('RedComponent tests',() => { 
    const wrapper = shallow(<RedComponent />); 
}); 

console.log(wrapper.debug());

<div className={[undefined]}></div> 
बजाय

देता है:

import React from 'react'; 
import * as styles from './RedComponent.css'; 

class RedComponent extends React.Component { 
    render() { 
    return <div className={ styles.red }></div>; 
    } 
} 

इस परीक्षण का मामला है

<div className="RedComponent__red"></div> 

अगर मैं आयातित शैलियों को सांत्वना मैं

console.log(styles); // {default: {}} 

यह केवल जेस्ट परीक्षण मामलों में है मिलता है। ब्राउज़र में ऐप प्रस्तुत होने पर स्टाइल को अपरिभाषित नहीं किया जाता है।

मेरे हंसी config:

{ 
    "moduleFileExtensions": [ 
    "js" 
    ], 
    "moduleDirectories": [ 
    "node_modules" 
    ], 
    "moduleNameMapper": { 
    "\\.(css|less)$": "identity-obj-proxy" 
    }, 
    "setupFiles": [ 
    "./test-setup.js" 
    ], 
    "collectCoverageFrom": [ 
    "src/**/*.{js}", 
    "!**/node_modules/**" 
    ], 
    "testEnvironment": "node", 
    "transform": { 
    "^.+\\.js$": "babel-jest", 
    "\\.(md|ttf|txt|eot|ico|otf|svg|png|gif|woff2|woff|jpeg)$": "./file-transformer.js" 
    } 
} 

हंसी v21.2.1, पहचान-obj-प्रॉक्सी v3.0.0 और प्रतिक्रिया v16.0.0 का उपयोग करना।

+0

से इस 'आयात शैलियों के साथ की कोशिश './RedComponent.css';' –

+0

@MartinShishkov वाह कि काम करता है! क्या आप इसे उत्तर के रूप में पोस्ट कर सकते हैं? क्या आपको यह भी पता है कि '' 'आयात *' '' क्यों काम नहीं करेगा? –

उत्तर

2

आप इस के लिए इस लाइन

import * as styles from './RedComponent.css'; 

बदलना होगा :

import styles from './RedComponent.css'; 

मुझे लगता है कि आप css-loader या इसी तरह के प्रयोग कर रहे हैं मान लेते हैं और यह सिर्फ कैसे लोडर काम करता है।

+0

हां वास्तव में। आदेश सीएसएस मॉड्यूल को सक्षम करने के लिए, आप विकल्प 'modules'' TRUE' करने के लिए सेट के साथ एक साथ 'सीएसएस-loader' उपयोग करने के लिए webpack कॉन्फ़िगर करना होगा। – ValentinVoilean

2

हो सकता है कि उदाहरण के जांच करने के लिए worths: https://github.com/keyanzhang/jest-css-modules-example/

मुझे लगता है कि अपने moduleNameMapper इस तरह होना चाहिए:

"^.+\\.(css|less)$": "identity-obj-proxy"

+1

उफ़ मैं कक्षा ऐसे नाम हैं जो आयातित शैलियों से लागू किया वर्ग नाम के लिए रंगमंच की सामग्री के माध्यम से पारित और सोचा कि यह काम किया, लेकिन यह काम नहीं कर रहा थे समझ लिया। –

+0

ठीक है, कोई समस्या नहीं है। खुशी है कि आप इसे अंत में हल किया। – ValentinVoilean

संबंधित मुद्दे