2015-02-10 54 views
1

我想为反应组件中的方法编写单元测试。我想在不渲染组件的情况下执行此操作。这是因为我不想设置完整渲染所需的全部数据。我想要做这样的事情:React中的单元测试非静态方法

describe('MyList', function() { 
    describe('fooSort', function() { 
    it('sort strings', function() { 
     var list = <MyList />; 

     var result = list.fooSort(['a', 'c', 'b']) 
     expect(result).to.be.equal(['a', 'b', 'c']) 
    }); 
    }); 
}); 

这可以通过添加fooSort作为一个静态方法来实现,但是,这将使它不可能的方法来访问此。它也不舒服。

有没有办法访问这些方法,或者是否有其他方法来做这种测试?

我知道这个帖子是类似于:How do I access methods in React for unit testing但不是真的一样。

+2

为什么你不想使用React的TestUtils?这将允许您呈现组件并测试一个方法,因为TestUtils.renderIntoDocument将返回组件的一个实例,您的'fooSort()'可用。 – 2015-02-10 13:44:30

+0

因为我的渲染函数需要一些强制道具,如果它们没有通过就会失败。所以我想避免使用render方法来避免在道具中创建需要的数据。但如果渲染是唯一的方法,我会去寻求你的建议。 – 2015-02-10 14:08:51

+0

看起来像一个小的代价,国际海事组织,生成一些适当的装置,你设置 - 你可能会需要它反正。 – 2015-02-10 14:12:31

回答

1

如果您使用new MyList而不是JSX <MyList />这可行。

describe('MyList', function() { 
    describe('fooSort', function() { 
    it('sort strings', function() { 
     var list = new MyList; 

     var result = list.fooSort(['a', 'c', 'b']) 
     expect(result).to.be.equal(['a', 'b', 'c']) 
    }); 
    }); 
}); 

被注意,如果是JSX将transpiled到React.createElement(MyList)而你的情况是不是你想要的。