UNPKG

style-it

Version:

Component for writing plaintext CSS in React apps -- isomorphic, scoped, FOUC-free, fully featured, CSS-in-JS

60 lines (51 loc) 1.82 kB
import React from 'react'; import { findDOMNode, render } from 'react-dom'; import TestUtils from 'react-addons-test-utils'; const removeNewlines = (string) => (string.replace(/(\r\n|\n|\r)/gm, '')) import Style from '../src/index.js'; class Item extends React.Component { render() { return Style.it(` li { color: blue; } `, ( <li className="item"> {this.props.text} </li> ) ); } } describe('Style-17', () => { it('creates a unique scope hash for each item based on props within that component tree', () => { const wrapper = TestUtils.renderIntoDocument( <div> <Style> {` ul { color: red; } `} <ul> <Item text="item1" /> <Item text="item2" /> </ul> </Style> </div> ); const rootNode = findDOMNode(wrapper).children[0]; const rootStyleNode = rootNode.children[0]; const rootScopedClass = rootNode.className.split(' ').slice(-1)[0]; expect(removeNewlines(rootStyleNode.textContent)).toEqual(` ul.${rootScopedClass} , .${rootScopedClass} ul { color: red; }`); const item1Node = rootNode.children[1]; const item1StyleNode = item1Node.children[0]; const item1ScopedClass = item1Node.className.split(' ').slice(-1)[0]; expect(removeNewlines(item1StyleNode.textContent)).toEqual(`.${item1ScopedClass} li { color: blue; }`); const item2Node = rootNode.children[2]; const item2StyleNode = item2Node.children[0]; const item2ScopedClass = item2Node.className.split(' ').slice(-1)[0]; expect(removeNewlines(item2StyleNode.textContent)).toEqual(`.${item2ScopedClass} li { color: blue; }`); expect(item1ScopedClass).not.toEqual(item2ScopedClass); }); });