测试一个值是否是玩笑中的函数

Ank*_*nte 5 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
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在为此文件编写单元测试。在单元测试中我想检查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?


  })
})
Run Code Online (Sandbox Code Playgroud)

我在这里唯一能够测试的是type. 我正在检查它是否是一个函数。

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

sli*_*wp2 2

对数据和函数名称进行断言type。此外,您可以测试该loader函数并对其进行断言,以验证该loader函数确实是您所需要的并且它能够正确执行。

\n\n

testClass.js:

\n\n
const loaders = {\n  model: (arg1) => {\n    // do something to return models data\n    console.log(\'do something to return models data\');\n  },\n  events: (arg2) => {\n    // do something to return events data\n  },\n};\n\nexport default class TestClass {\n  constructor(config) {\n    this.loader = loaders[config.type];\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

testClass.test.js:

\n\n
import TestClass from \'./testClass\';\n\ndescribe(\'TestClass\', () => {\n  test(\'The constructor sets the loader correctly\', () => {\n    jest.spyOn(console, \'log\');\n    const testClassObj = new TestClass({ type: \'model\' });\n    expect(typeof testClassObj.loader).toBe(\'function\');\n    expect(testClassObj.loader.name).toBe(\'model\');\n    testClassObj.loader();\n    expect(console.log).toBeCalledWith(\'do something to return models data\');\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

单元测试结果:

\n\n
 PASS  src/stackoverflow/59352068/ testClass.test.js (10.165s)\n  TestClass\n    \xe2\x9c\x93 The constructor sets the loader correctly (27ms)\n\n  console.log node_modules/jest-mock/build/index.js:860\n    do something to return models data\n\nTest Suites: 1 passed, 1 total\nTests:       1 passed, 1 total\nSnapshots:   0 total\nTime:        11.273s\n
Run Code Online (Sandbox Code Playgroud)\n