摩卡单元测试:在哪里创建变量

时间:2017-08-19 01:39:05

标签: node.js unit-testing mocha

我第一次进入单元测试。在Node中使用Mocha作为测试框架。我遇到的所有示例都在it()内创建变量。如果它们是在it()内部或外部创建的,这是否重要?例如,如果我在it()中有多个describe(),我需要在所有it()中使用相同的模拟数据。如果可能的话,我宁愿不要重复创建相同的变量。

describe ('MyClass', function () {
    let myObj = new MyObj // Mock data here
    it ('Should be...', function () {
        ....
    })
    it ('Should be...', function () {
        ....
    })
    ...
})

1 个答案:

答案 0 :(得分:4)

让变量存在于您的个人it块之外是完全可以接受的,但根据您的使用情况,它可能不合适。

对于您不希望更改的对象,Object.freeze是一个选项:const myObj = Object.freeze(new MyObj)

如果您希望测试更改对象,则应使用beforeEach确保它们恢复到正常状态;这将阻止您的it块彼此污染并避免令人不快的调试过程。

例如:

describe('MyClass', function () {
  let myObj

  beforEach(() => {
    myObj = new MyObj()
  })

  it('changes myObj', () => {
    changeProp(myObj.sum)
    expect(myObj.sum).toEqual(4)
  })

  it('depends on myObj being the same', () => {
    expect(myObj.sum).toEqual(2)
  })
})

或者,您可以避开胖箭头语法并依赖于mocha中块之间的共享上下文:

beforeEach(function () {
  this.myObj = new MyObj()
})

it('changes myObj', function () {
  addTwo(this.myObj.sum)
  expect(this.myObj.sum).toEqual(4)
})

it('depends on myObj being the same', function () {
  expect(this.myObj.sum).toEqual(2)
})