找到super-secret hidden react-router testing guide后,我开始工作了。
我没有使用 Object.assign 创建路由器存根,而是使用 sinon.js,这样我可以创建更好的存根函数,为我的测试返回适当的值。
编辑:回去再次查看您的样板文件,发现您的存根路由器是从同一个示例中借用的。对不起。那么你到底卡在哪里了?
再次编辑:我没有使用 Jest,所以这里是解决测试难题所需的其他部分:
- 如果您使用的是 browserify,并且想在纯 mocha 中进行测试(无需构建),您需要破解
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);
};
- 你需要一个假的 DOM。 JSDOM 简直太糟糕了。我改用
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";
- 然后您可以通过 stub-router 请求您的组件,并使用
React.render() 将您的组件渲染到 DOM 节点:
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