Dav*_*Sag 6 javascript unit-testing proxyquire es6-class
我有一个课AProvider要求'./b.provider'.
const BProvider = require('./b.provider');
class AProvider {
static get defaultPath() {
return `defaults/a/${BProvider.getThing()}`;
}
}
module.exports = AProvider;
Run Code Online (Sandbox Code Playgroud)
b.provider.js毗邻a.provider.js并且看起来像
global.stuff.whatever = require('../models').get('Whatever'); // I didn't write this!
class BProvider {
static getThing() {
return 'some-computed-thing';
}
}
module.exports = BProvider;
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我使用如下proxyquire模拟./b.provider:
import { expect } from 'chai';
import proxyquire from 'proxyquire';
describe('A Provider', () => {
const Provider = proxyquire('../src/a.provider', {
'./b.provider': {
getThing: () => 'b-thing'
},
});
describe('defaultPath', () => {
it('has the expected value', () => {
expect(Provider.defaultPath).to.equal('defaults/a/b-thing')
});
});
});
Run Code Online (Sandbox Code Playgroud)
但是,当我运行测试BProvider仍然需要实际'./b.provider'不是存根而BProvider的引用global.stuff.whatever是抛出错误.
为什么这不起作用?
关于为什么会发生这种情况的答案如下
proxyquire在将其删除之前仍然需要底层代码.它这样做是为了启用呼叫.
解决方案只是明确禁止通过.
测试成为:
import { expect } from 'chai';
import proxyquire from 'proxyquire';
describe('A Provider', () => {
const Provider = proxyquire('../src/a.provider', {
'./b.provider': {
getThing: () => 'b-thing',
'@noCallThru': true
},
});
describe('defaultPath', () => {
it('has the expected value', () => {
expect(Provider.defaultPath).to.equal('defaults/a/b-thing')
});
});
});
Run Code Online (Sandbox Code Playgroud)
运行此测试非常有效.
| 归档时间: |
|
| 查看次数: |
3375 次 |
| 最近记录: |