我正在使用mocha测试React组件。我试图捕捉一些警告(通过console
),主要与“失败的propType”和React可以提供的其他警告有关。但是我不得不重复使用其他测试方法,因为测试只会在第一次显示警告。
这是我的测试代码:
var jsdom = require('mocha-jsdom');
var { expect, assert } = require('chai');
var sinon = require('sinon');
describe('Deck', function() {
jsdom();
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;
var Deck, Card, OtherMock;
var renderer, result;
beforeEach(function() {
Deck = require('../App/Components/Deck.js');
Card = require('../App/Components/Card.js')
OtherMock = React.createClass({ render: function() { return null } });
renderer = React.addons.TestUtils.createRenderer();
renderer.render(
<Deck>
<OtherMock />
<OtherMock />
<OtherMock />
<Card />
<Card />
<Card />
</Deck>
);
result = renderer.getRenderOutput();
});
afterEach(function() {
});
it('should create a new instance of Deck', function () {
expect(result).to.exist;
});
it('should have a default style', function () {
expect(result.props.style).to.exist;
});
it('should only allow children of type Card', function () {
expect(result.props.children.length).to.exist;
expect(result.props.children.length).to.equal(3);
});
it('should allow one card', function() {
var renderer = React.addons.TestUtils.createRenderer();
renderer.render(
<Deck>
<Card />
</Deck>
);
var result = renderer.getRenderOutput()
expect(result).to.exist;
expect(React.Children.count(result.props.children)).to.equal(1);
});
it('should render empty when passed incorrect children', function() {
var renderer = React.addons.TestUtils.createRenderer();
renderer.render(
<Deck>
<OtherMock />
</Deck>
);
var result = renderer.getRenderOutput()
expect(result).to.exist;
expect(React.Children.count(result.props.children)).to.equal(0);
});
it('should render when empty', function() {
var renderer = React.addons.TestUtils.createRenderer();
renderer.render(
<Deck />
);
var result = renderer.getRenderOutput()
expect(result).to.exist;
});
it('should add keys to children', function() {
var index = React.Children.count(result.props.children);
React.Children.forEach(result.props.children, function(child) {
expect(child.props.cardIndex).to.exist;
expect(child.props.cardIndex).to.equal(--index);
})
});
it('should have just the first child with handlers');
it('should have only the first and second child with images');
it('should preload up to the determined number of images');
})
我看到的是第一次运行(键入npm run test
只调用mocha --watch --compilers js:babel/register --recursive
)它会显示警告,我可以用sinon和所有内容模拟console.warn
:
然而,第二次,我没有得到任何警告,我对console.warn
间谍的测试将失败。
知道这里发生了什么吗?我试过在摩卡的Gitter中,在IRC的React频道中,通过文档和mocha --help
,但无济于事。