Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 摩卡与柴间谍的麻烦_Reactjs_Mocha.js_Chai_Karma Mocha_Mocha Phantomjs - Fatal编程技术网

Reactjs 摩卡与柴间谍的麻烦

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

下面是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('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();
});
});