我一直在研究在 TypeScript 中开发基于 React 的组件的良好工作流程。
从 1.6 开始,TypeScript 通过扩展在 TypeScript 文件中原生支持 JSX,.tsx
并且tsd
我们可以获得 IDE (atom/WebStorm) 来支持类型检查。
但是,似乎没有一种简单的方法来测试用tsx
.
你能分享你对此的见解吗?
我正在考虑(几乎不得不使用)Jest
而不是 pure Jasmine
,因为Jest
的运行时环境带有 DOM。但是,jest 似乎仅适用于 ES2015 throughbabel
和es2015, react
预设。有没有现成的方法可以Jest
使用tsx
?
目前,我可以测试用 ES2015 编写的 React 组件,例如:
// SampleComponent.js
import React from 'react';
class SampleComponent extends React.Component {
constructor(props) {
super(props);
}
render() {
return (<div className='container'>Hello World!</div>);
}
}
module.exports = SampleComponent;
相应的测试可能如下所示:
// __tests__/SampleComponent-test.js
import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-addons-test-utils';
const SampleComponent = require('../SampleComponent');
describe('SampleComponent', ()=>{
it("has some text", ()=>{
const result = TestUtils.renderIntoDocument(
<SampleComponent />
);
const sampleComponentNode = ReactDOM.findDOMNode(result);
// expect statements
});
});
这很好用,但是如果我们用 , 替换.js
扩展名.tsx
并将其更改scriptPreprocessor
为:
'use strict';
var ts = require('typescript');
module.exports = {
process: function(src, path) {
if (path.match(/\.(ts|tsx)$/) && !path.match(/\.d\.ts$/)) {
return ts.transpile(src, {jsx: ts.JsxEmit.React, module: ts.ModuleKind.CommonJS});
}
return src;
},
};
一切都乱套了,尤其是关于 TypeScript 处理模块加载的方式