我有一个包含一个类的JS文件。看起来像这样:
// testClass.js
const loaders = {
"model": (arg1)=> {
// do something to return models data
},
"events": (arg2)=> {
// do something to return events data
}
}
export default class TestClass{
constructor(config){
this.loader = loaders[config.type] // I want to test this line
}
}
我正在为此文件编写单元测试。在单元测试中,我要检查this.loader
的设置是否正确。基本上,我想测试是否将正确的功能指定为this.loader
。
这是我的单元测试文件
// testClass.test.js
import TestClass from './testClass'
describe('TestClass', ()=> {
test('The constructor sets the loader correctly', ()=> {
const testClassObj = new TestClass({type: 'model'})
expect(typeof testClassObj.loader).toBe("function") // What else can I test apart from the type?
})
})
我唯一可以在这里测试的是type
。我正在检查它是否具有功能。
我的问题是:我还能在这里测试什么?如果期望值是一个函数,我还要测试什么?
答案 0 :(得分:0)
对数据type
和函数名进行断言。此外,您可以测试loader
函数并对其进行断言,以验证loader
函数确实是您所需要的并且可以正确执行。
testClass.js
:
const loaders = {
model: (arg1) => {
// do something to return models data
console.log('do something to return models data');
},
events: (arg2) => {
// do something to return events data
},
};
export default class TestClass {
constructor(config) {
this.loader = loaders[config.type];
}
}
testClass.test.js
:
import TestClass from './testClass';
describe('TestClass', () => {
test('The constructor sets the loader correctly', () => {
jest.spyOn(console, 'log');
const testClassObj = new TestClass({ type: 'model' });
expect(typeof testClassObj.loader).toBe('function');
expect(testClassObj.loader.name).toBe('model');
testClassObj.loader();
expect(console.log).toBeCalledWith('do something to return models data');
});
});
单元测试结果:
PASS src/stackoverflow/59352068/ testClass.test.js (10.165s)
TestClass
✓ The constructor sets the loader correctly (27ms)
console.log node_modules/jest-mock/build/index.js:860
do something to return models data
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 11.273s