我第一次进入单元测试。在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 () {
....
})
...
})
答案 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)
})