Eva*_*man 56 javascript unit-testing ecmascript-6 traceur jestjs
我正在尝试使用webpack + traceur来调用Ecmascript 6模块来转换为ES5 CommonJS,但是我无法成功地对它们进行单元测试.
我尝试使用Jest + traceur预处理器,但自动插件和依赖名称似乎变得棘手,而且我似乎无法使用sourceMaps来使用Jest和node-inspector调试.
是否有更好的单元测试ES6模块框架?
car*_*iam 53
我已经开始import * as obj在我的测试中使用该样式,它将模块中的所有导出作为对象的属性导入,然后可以对其进行模拟.我发现这比使用重新布线或代理或任何类似技术更清洁.
我不能代表问题中使用的框架traceur,但我发现这与我的Karma,Jasmine和Babel的设置一起工作,我在这里发布它,因为这似乎是最受欢迎的这种类型的问题.
在需要模拟Redux操作时,我经常使用此策略.这是一个简短的例子:
import * as exports from 'module-you-want-to-mock';
import SystemUnderTest from 'module-that-uses-above-module';
describe('your module', () => {
beforeEach(() => {
spyOn(exports, 'someNamedExport'); // mock a named export
spyOn(exports, 'default'); // mock the default export
});
// ... now the above functions are mocked
});
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Webpack,则另一个选项比重新连接具有更多的灵活性,即inject-loader.
例如,在与Webpack捆绑的测试中:
describe('when an alert is dismissed', () => {
// Override Alert as we need to mock dependencies for these tests
let Alert, mockPubSub
beforeEach(() => {
mockPubSub = {}
Alert = require('inject!./alert')({
'pubsub-js': mockPubSub
}).Alert
})
it('should publish \'app.clearalerts\'', () => {
mockPubSub.publish = jasmine.createSpy()
[...]
expect(mockPubSub.publish).toHaveBeenCalled()
})
})
Run Code Online (Sandbox Code Playgroud)
inject-loader,以类似于proxyquire的方式,至少允许一个人在导入之前注入依赖关系,而在重新连接中你必须首先导入然后重新连接,这使得模拟一些组件(例如那些有一些初始化的组件)是不可能的.
我实际上通过删除Jest并使用Karma + Jasmine + Webpack并使用https://github.com/jhnns/rewire来模拟依赖项来实现此功能
小智 5
嗨,您可以使用proxyquire:
import assert from 'assert';
import sinon from 'sinon';
import Proxyquire from 'proxyquire';
let proxyquire = Proxyquire.noCallThru(),
pathModelLoader = './model_loader';
describe('ModelLoader module.', () => {
it('Should load all models.', () => {
let fs, modelLoader, ModelLoader, spy, path;
fs = {
readdirSync(path) {
return ['user.js'];
}
};
path = {
parse(data) {
return {name: 'user'};
}
};
ModelLoader = proxyquire(pathModelLoader, {'fs': fs, 'path': path});
modelLoader = new ModelLoader.default();
spy = sinon.spy(modelLoader, 'loadModels');
modelLoader.loadModels();
assert(spy.called);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23686 次 |
| 最近记录: |