Reactjs 摩卡与柴间谍的麻烦
下面是GlobalMenu.react.js:Reactjs 摩卡与柴间谍的麻烦,reactjs,mocha.js,chai,karma-mocha,mocha-phantomjs,Reactjs,Mocha.js,Chai,Karma Mocha,Mocha Phantomjs,下面是GlobalMenu.react.js: var React = require('react'); var AppBar = require('material-ui/lib/app-bar'); var IconMenu = require('material-ui/lib/menus/icon-menu'); var MenuItem = require('material-ui/lib/menus/menu-item'); var IconButton = require('mat
var React = require('react');
var AppBar = require('material-ui/lib/app-bar');
var IconMenu = require('material-ui/lib/menus/icon-menu');
var MenuItem = require('material-ui/lib/menus/menu-item');
var IconButton = require('material-ui/lib/icon-button');
var NavigationMenu = require('material-ui/lib/svg-icons/navigation/menu');
var ActionHome = require('material-ui/lib/svg-icons/action/home');
var ActionInfo = require('material-ui/lib/svg-icons/action/info');
var ActionExitToApp = require('material-ui/lib/svg-icons/action/exit-to-app');
var GlobalMenu = React.createClass({
handleHomeButton: function() {
//When this gets implemented, don't forget to add test to GlobalMenu.Test.js, kthxbai
alert('home');
},
handleInfoButton: function() {
//When this gets implemented, don't forget to add test to GlobalMenu.Test.js, kthxbai
alert('info');
},
handleExitButton: function() {
//When this gets implemented, don't forget to add test to GlobalMenu.Test.js, kthxbai
alert('exit');
},
/**
* @return {object}
*/
render: function() {
var barStyle = {
width: '@.global-menu'
};
return (
<AppBar className = "global-menu"
style = { barStyle }
iconElementLeft = {
<div id="store-logo">
<a href="#" title="Home" onClick={this.handleHomeButton}></a>
</div>
}
iconElementRight = {
<div>
<IconButton
className = "GlobalMenuButtons-Large"
tooltip="Home"
name="homeButton"
onClick={this.handleHomeButton} ><ActionHome />
</IconButton>
<IconButton
className = "GlobalMenuButtons-Large"
tooltip="Info"
name="infoButton"
onClick={this.handleInfoButton} ><ActionInfo />
</IconButton>
<IconButton
className = "GlobalMenuButtons-Large"
tooltip="Exit"
name="exitButton"
onClick={this.handleExitButton} ><ActionExitToApp />
</IconButton>
<IconMenu
className = "GlobalMenuButtons-Small"
iconButtonElement = {<IconButton><NavigationMenu /></IconButton>}
>
<MenuItem
primaryText="Home"
leftIcon={ <ActionHome /> }
onClick={this.handleHomeButton}
/>
<MenuItem
primaryText="Info"
leftIcon={ <ActionInfo /> }
onClick={this.handleInfoButton}
/>
<MenuItem
primaryText="Exit"
leftIcon={ <ActionExitToApp /> }
onClick={this.handleExitButton}
/>
</IconMenu>
</div>
}
/>
);
}
});
module.exports = GlobalMenu;
var React=require('React');
var-AppBar=require('material-ui/lib/app-bar');
var IconMenu=require('material-ui/lib/menu/icon-menu');
var MenuItem=require('material-ui/lib/菜单/菜单项');
var IconButton=require('material-ui/lib/icon-button');
var NavigationMenu=require('material-ui/lib/svg图标/navigation/menu');
var ActionHome=require('material-ui/lib/svg-icons/action/home');
var ActionInfo=require('material-ui/lib/svg-icons/action/info');
var ActionExitToApp=require('material-ui/lib/svg图标/action/exit to-app');
var GlobalMenu=React.createClass({
handleHomeButton:函数(){
//实现此功能后,不要忘记将测试添加到GlobalMenu.test.js、kthxbai中
警报(“主页”);
},
HandleInfo按钮:函数(){
//实现此功能后,不要忘记将测试添加到GlobalMenu.test.js、kthxbai中
警报(“信息”);
},
handleExitButton:函数(){
//实现此功能后,不要忘记将测试添加到GlobalMenu.test.js、kthxbai中
警报(“退出”);
},
/**
*@return{object}
*/
render:function(){
变量barStyle={
宽度:“@.全局菜单”
};
返回(
}
iconElementRight={
}
/>
);
}
});
module.exports=全局菜单;
以下是我对它的测试:
var React = require('react');
var ReactDOM = require('react-dom');
var ReactDOMServer = require('react-dom/server');
var TestUtils = require('react-addons-test-utils');
var IconButton = require('material-ui/lib/icon-button');
var GlobalMenu = require("../../src/components/GlobalMenu/GlobalMenu.react.js");
var component, componentDocument;
var spies = require('chai-spies');
chai.use(spies);
var spy = chai.spy.on(window,"alert");
describe("GlobalMenu",function(){
before(function(){
this.timeout(8000);
//Campaign.fakeCampaign();
component = ReactDOMServer.renderToStaticMarkup(
<GlobalMenu />
);
componentDocument = TestUtils.renderIntoDocument(
<GlobalMenu/>
);
});
it.only("should handle home button click",function(){
var homeSpy = chai.spy.on(componentDocument,"handleHomeButton");
var buttons = TestUtils.scryRenderedComponentsWithType(componentDocument,IconButton);
var firstButton = ReactDOM.findDOMNode(buttons[0]);
console.log(homeSpy);
TestUtils.Simulate.click(firstButton);
console.log(homeSpy);
//componentDocument.handleHomeButton();
expect(homeSpy).to.have.been.called();
});
});
var React=require('React');
var ReactDOM=require('react-dom');
var ReactDOMServer=require('react-dom/server');
var TestUtils=require('react-addons-test-utils');
var IconButton=require('material-ui/lib/icon-button');
var GlobalMenu=require(“../../src/components/GlobalMenu/GlobalMenu.react.js”);
var组件,组件文档;
var spies=要求(“柴-spies”);
使用(间谍);
var spy=chai.spy.on(窗口,“警报”);
描述(“全局菜单”,函数(){
在(函数()之前){
这是超时(8000);
//活动。伪造活动();
component=ReactDOMServer.renderToStaticMarkup(
);
componentDocument=TestUtils.renderIntoDocument(
);
});
仅此(“应处理主页按钮单击”,函数(){
var homeSpy=chai.spy.on(组件文档,“handleHomeButton”);
var buttons=TestUtils.scryRenderedComponentsWithType(componentDocument,IconButton);
var firstButton=ReactDOM.findDOMNode(按钮[0]);
控制台日志(homeSpy);
TestUtils.Simulate.click(第一个按钮);
控制台日志(homeSpy);
//componentDocument.handleHomeButton();
expect(homeSpy).to.have.been.called();
});
});
间谍没有被叫来,我也不知道我做错了什么。警报正在输出到控制台,因此我知道函数正在被调用。如果我取消对componentDocument.handleHomeButton()的注释;测试通过了,但这并不是真正的测试
我应该使用存根吗?我对柴特务不太熟悉,但使用sinon,您可能可以执行以下操作:
描述(“全局菜单”,函数(){
让"间谍",;
在(函数()之前){
_spy=sinon.spy();
GlobalMenu.prototype.handleHomeButton=\u spy;
componentDocument=TestUtils.renderIntoDocument(
);
});
仅此(“应处理主页按钮单击”,函数(){
var buttons=TestUtils.scryRenderedComponentsWithType(componentDocument,IconButton);
var firstButton=ReactDOM.findDOMNode(按钮[0]);
TestUtils.Simulate.click(第一个按钮);
expect(_spy).to.have.been.called();
});
});代码>我对chai间谍不太熟悉,但有了sinon,你可能可以做如下事情:
描述(“全局菜单”,函数(){
让"间谍",;
在(函数()之前){
_spy=sinon.spy();
GlobalMenu.prototype.handleHomeButton=\u spy;
componentDocument=TestUtils.renderIntoDocument(
);
});
仅此(“应处理主页按钮单击”,函数(){
var buttons=TestUtils.scryRenderedComponentsWithType(componentDocument,IconButton);
var firstButton=ReactDOM.findDOMNode(按钮[0]);
TestUtils.Simulate.click(第一个按钮);
expect(_spy).to.have.been.called();
});
});代码>