2015-02-10 94 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)而你的情況是不是你想要的。