测试值是否是开玩笑的函数

时间:2019-12-16 07:17:22

标签: unit-testing jestjs

我有一个包含一个类的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。我正在检查它是否具有功能。

我的问题是:我还能在这里测试什么?如果期望值是一个函数,我还要测试什么?

1 个答案:

答案 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