Reactjs react路由器v4链路不';不要在karma test runner中工作
我想写一些规范来测试我的应用程序中的当前路由。我使用karma运行我的Spec和mocha作为测试框架。在我点击一些Reactjs react路由器v4链路不';不要在karma test runner中工作,reactjs,react-router,Reactjs,React Router,我想写一些规范来测试我的应用程序中的当前路由。我使用karma运行我的Spec和mocha作为测试框架。在我点击一些组件之前,一切都正常。事件onclick已启动,但不会触发重新呈现我的组件,因此不会发生任何更改(应用程序不会呈现新的路由器)。我当前的代码: <!-- language: lang-js --> 'use strict'; import React from 'react'; import { BrowserRouter, Match, Redirect } from
组件之前,一切都正常。事件onclick已启动,但不会触发重新呈现我的组件,因此不会发生任何更改(应用程序不会呈现新的
路由器)。我当前的代码:
<!-- language: lang-js -->
'use strict';
import React from 'react';
import { BrowserRouter, Match, Redirect } from 'react-router';
import { shallow, mount } from 'enzyme';
import sinon from 'sinon';
import chai, { expect } from 'chai';
import axios from 'axios';
import Main_Store from '../../main.store';
import Base from '../../components/base.component';
describe.only('--Routing--', () => {
let main_store, wrap;
beforeEach(() => {
main_store = new Main_Store();
wrap = mount(
<MemoryRouter initialIndex={1} initialEntries={['/', '/kit']}>
<Match pattern={'/:district'} render={(props) => {
console.log('trigger match');
return <Base {...props} main_store={main_store} />
}
} />
</MemoryRouter>
);
});
describe('click on link', () => {
beforeEach(() => {
wrap.find('Link').findWhere(n => n.prop('to') === '/kit/user-1/type-created').simulate('click');
});
it('render Profile Bar', () => {
console.log('current html', wrap.html())
expect(wrap.find('.personSidebar')).to.have.length(1);
});
});
});
"严格使用",;
从“React”导入React;
从“react router”导入{BrowserRouter,Match,Redirect};
从“酶”导入{shall,mount};
从“sinon”进口sinon;
从“chai”导入chai,{expect};
从“axios”导入axios;
从“../../Main.Store”导入主存储;
从“../../components/Base.component”导入Base;
仅说明('--路由--',()=>{
让主_储存、包装;
在每个之前(()=>{
main_store=新的main_store();
包裹=安装(
{
log(“触发器匹配”);
返回
}
} />
);
});
描述('点击链接',()=>{
在每个之前(()=>{
wrap.find('Link').findWhere(n=>n.prop('to')=='/kit/user-1/type created').simulate('click');
});
它('渲染配置文件栏',()=>{
console.log('current html',wrap.html())
expect(wrap.find('.personSidebar')).to.have.length(1);
});
});
});
当前事件日志
event.button=0
)。酶传递的默认事件不包括此项。您可以将事件对象添加到simulate
调用中,以正确配置模拟事件
wrap.find('Link')
.findWhere(n => n.prop('to') === '/kit/user-1/type-created')
.simulate('click', {
defaultPrevented: false,
preventDefault() { this.defaultPrevented = true },
metaKey: null,
altKey: null,
ctrlKey: null,
shiftKey: null,
button: 0
});
首先,您能否在
节点\u模块中找到这行代码()
,并将其记录在回调中的this.history.location
(在this.forceUpdate()之前)
?如果它记录了您模拟点击的路径,那么应该验证点击是否传递到历史记录中。它在测试时不记录任何内容,但在浏览器中记录下一个对象{pathname:“/kit/base/type popular concepts”,搜索:“,散列:”,查询:null,键:“z33ga5”}好的,所以问题似乎是模拟的点击不起作用。您是否可以在链接组件的转换处理程序()中将登录到
,以验证单击是否确实被发送到您的历史记录
实例。当我登录到时,我没有得到任何信息。我还在handleClick方法中添加了几个console.log:每个if语句前加一个,每个if语句内加一个;只有第一个控制台日志(在第一个if语句之前)被触发。您的
是否附加了onClick
事件?谢谢!你帮了我很多问题。我很高兴)