我已经阅读了许多关于如何通过 react-router 组件渲染路由的建议,但我仍然无法让它工作。我试图使用 github 代码库搜索找到它,但仍然没有运气。在这一点上,我需要的只是一个工作示例。
这是我的样板项目,但也许它并不重要。我只想看一些 react-route 单元测试工作示例。
我已经阅读了许多关于如何通过 react-router 组件渲染路由的建议,但我仍然无法让它工作。我试图使用 github 代码库搜索找到它,但仍然没有运气。在这一点上,我需要的只是一个工作示例。
这是我的样板项目,但也许它并不重要。我只想看一些 react-route 单元测试工作示例。
在我找到超级秘密隐藏的 react-router 测试指南后,我开始工作了。
我没有使用 Object.assign 创建路由器存根,而是使用 sinon.js,这样我就可以创建更好的存根函数,为我的测试返回适当的值。
编辑:再次查看您的样板文件,发现您的存根路由器是从同一个示例中借用的。对不起。那么你到底卡在哪里呢?
再次编辑:我没有使用 Jest,所以这里是我解决测试难题所需的其他部分:
require
为您编译 jsx: var fs = require("fs");
var reactTools = require("react-tools");
require.extensions[".jsx"] = function(module, filename) {
var jsxContent = fs.readFileSync(filename).toString();
var jsContent = reactTools.transform(jsxContent);
return module._compile(jsContent, filename);
};
domino
代替。 var domino = require("domino");
global.window = domino.createWindow();
global.document = global.window.document;
//Set the NODE_ENV so we can call `render`.
//Otherwise we get an error from react about server rendering. :(
process.env.NODE_ENV = "test";
React.render()
: var MyComponent = fakeRouter(require("./MyComponent.jsx"));
var component = React.render(
< MyComponent / > ,
document.body
);
node = component.getDOMNode();
//I used `zepto-node` and `chai-jq` to assert against my components
这样做的(v4 中可能是新的)方法是将您正在测试的组件包装在MemoryRouter
由 react-router 提供的组件中。
import {MemoryRouter} from 'react-router-dom';
import {render} from 'react-dom';
render(<MemoryRouter>
<YourComponent>
</MemoryRouter>, node, () => {});