我为自己的行为编写测试,

{ browserHistory } from 'react-router';

当我运行测试时,由于未知原因,未定义导入的browserHistory。因此,测试将引发错误-“无法读取未定义的属性'push'”;
我不知道,如果browserHistory在我的应用程序中有效,为什么未定义browserHistory。有人可以帮我吗?

最佳答案

我想您可能没有使用业力或任何浏览器来运行测试。如果没有浏览器,则对象browserHistory将是未定义的。您可能需要使用sinon对浏览器历史记录进行 stub 。类似以下内容可能会有所帮助:

import chai from 'chai';
import sinonChai from 'sinon-chai';
import componentToTest from './component-to-test'
import sinon from 'sinon';
import * as router from 'react-router';

var expect = chai.expect;
chai.use(sinonChai);

describe('Test A Component', () => {

    it('Should success.', () => {
        router.browserHistory = { push: ()=>{} };
        let browserHistoryPushStub = sinon.stub(router.browserHistory, 'push', () => { });
        //mount your component and do your thing here
        expect(browserHistoryPushStub).to.have.been.calledOnce;

        browserHistoryPushStub.restore();
    });

});

关于javascript - 单元测试 react Action -browserHistory未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37831788/

10-09 10:01