[React Testing] Conditional className with Shallow Rendering

Often our components have output that shows differently depending on the props it is given; in this lesson, we go over how to compare the className prop element tree output based on conditional input.

 

复制代码
// LikeCounter.js

import React from 'react';
import classnames from 'classnames';

const LikeCounter = ({count, isActive}) => {
    return <a
        className={
            classnames({
                'LikeCounter--active': isActive
            })
        }
        href="#">Like: {count}</a>
}

export default LikeCounter;

// LikeCounter.spec.js
import React from 'react';
import expect from 'expect';
import expectJSX from 'expect-jsx';
import TestUtils from 'react-addons-test-utils';
import LikeCounter from './likeCounter';

describe('LikeCOunter', ()=>{

    it('should be a link', ()=>{
        const renderer = TestUtils.createRenderer();
        renderer.render(<LikeCounter count={5} />);
        const actual = renderer.getRenderOutput().type;
        const expected = 'a';
        expect(actual).toEqual(expected);
    });
});

describe('active class', ()=>{
    it('should have active class based on isActive props: true', ()=>{

        const renderer = TestUtils.createRenderer();
        renderer.render(<LikeCounter count={5} isActive={true}/>);
        const actual = renderer.getRenderOutput().props.className.includes('LikeCounter--active');
        const expected = true;
        expect(actual).toEqual(expected);
    });

    it('should have active class based on isActive props: false', ()=>{

        const renderer = TestUtils.createRenderer();
        renderer.render(<LikeCounter count={5} isActive={false}/>);
        const actual = renderer.getRenderOutput().props.className.includes('LikeCounter--active');
        const expected = false;
        expect(actual).toEqual(expected);
    });
});
复制代码

 

posted @   Zhentiw  阅读(273)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2015-01-07 [MODx] 9. Real Example
2015-01-07 [MODx] 8. Snippet get data, chunk display
2015-01-07 [MODx] 7. MIGX DB
2015-01-07 [MODx] 6. Cache '!' with login package
2015-01-07 [AngularJS - app] AngularJS Location-picker app
2015-01-07 [AngularJS - thoughtram] Exploring Angular 1.3: Binding to Directive Controllers
点击右上角即可分享
微信分享提示