zoukankan      html  css  js  c++  java
  • [Unit testing + Jest] Use a Test Object Factory utils/generate

    You can have a untils folder under root folder, to let jest include your files, you can do:

    const path = require('path')
    
    module.exports = {
      displayName: 'exercise',
      roots: [path.join(__dirname, '../src')],
      rootDir: path.join(__dirname, '..'),
      testEnvironment: 'node',
      testMatch: ['**/__tests__/*.exercise.*'],
      moduleDirectories: [
        'node_modules',
        __dirname,
        path.join(__dirname, '../src'),
      ],
      coverageDirectory: path.join(__dirname, '../coverage-exercises'),
      coveragePathIgnorePatterns: ['.*/__tests__/.*'],
      setupFilesAfterEnv: [require.resolve('./setup-env')],
      watchPlugins: [
        require.resolve('jest-watch-typeahead/filename'),
        require.resolve('jest-watch-typeahead/testname'),
      ],
    }

    SO that you can include those file at test:

    import {buildNext, buildRes} from 'utils/generate'

    Helper functions:

    function buildReq({user = buildUser(), ...overrides} = {}) {
      const req = {user, body: {}, params: {}, ...overrides}
      return req
    }
    
    function buildRes(overrides = {}) {
      const res = {
        json: jest.fn(() => res).mockName('json'),
        status: jest.fn(() => res).mockName('status'),
        ...overrides,
      }
      return res
    }
    
    function buildNext(impl) {
      return jest.fn(impl).mockName('next')
    }

    Test example:

      test('if res.headersSent, then pass down error', () => {
        const res = buildRes({headersSent: true})
        const next = buildNext()
        const error = new Error('error')
        errorMiddleware(error, null, res, next)
        expect(next).toHaveBeenCalledWith(error)
        expect(next).toHaveBeenCalledTimes(1)
        expect(res.json).not.toHaveBeenCalled()
        expect(res.status).not.toHaveBeenCalled()
      })
  • 相关阅读:
    Cordova/Cordova.h file not found的解决方法
    使用MethodSwizzle导致按home app进入后台或者app间切换发生crash的解决方法
    基于iOS上MDM技术相关资料整理及汇总
    iOS集成微信支付
    iOS集成支付宝支付
    最新apple邓白氏码申请地址
    游戏的定价
    许久未更,随便侃侃
    记一个有趣的梦
    由《掟上今日子的备忘录》引发的联想
  • 原文地址:https://www.cnblogs.com/Answer1215/p/15118999.html
Copyright © 2011-2022 走看看