我在页面上有两个函数,它们包含很多jQuery。代码在下面
module.exports = function(property) {
var data = decodeEntities(property)
}
function decodeEntities(encodedString) {
let textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
我需要为encodeEntities函数编写测试用例。但是我不敢更改module.exports = function(property)
此代码,因为它是从handlebars模板调用的。
现在如何在不导出的情况下测试decodeEntities函数的单元测试?
答案 0 :(得分:0)
您可以使用rewire模块来获取未导出的decodeEntities
函数。例如
index.js
:
module.exports = function(property) {
var data = decodeEntities(property);
};
function decodeEntities(encodedString) {
let textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
index.test.js
:
const rewire = require('rewire');
const mod = rewire('./');
describe('60349818', () => {
describe('#decodeEntities', () => {
it('should pass', () => {
const mElement = { innerHTML: '', value: 'some value' };
const mCreateElement = jest.fn().mockReturnValueOnce(mElement);
mod.__set__('document', {
createElement: mCreateElement,
});
const decodeEntities = mod.__get__('decodeEntities');
const actual = decodeEntities('encodedString');
expect(actual).toEqual('some value');
expect(mCreateElement).toBeCalledWith('textarea');
});
});
});
单元测试结果:
PASS stackoverflow/60349818/index.test.js
60349818
#decodeEntities
✓ should pass (4ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.334s
源代码:https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/60349818