2017-04-24 73 views
1

我刚开始学习使用Jasmine进行单元测试。我已经浏览了茉莉花的official documentation,并在整个计算器上搜索了很多。请参阅下面的代码。我什么时候需要在Jasmine的beforeEach块中使用?

describe('calculator', function() { 
    var calculator; 
    beforeEach(function(){ 
    calculator = new myApp.Calculator(); 
    }); 

    describe('sum', function() { 
    it('1 + 1 should equal 2', function() { 
     expect(calculator.add(1, 1)).toBe(2); 
    }); 
    }); 

    describe('subtract', function() { 
    it('3 - 2 should equal 1', function() { 
     expect(calculator.subtract(3, 2)).toBe(1); 
    }); 
    }); 

}); 

这里,我已经初始化/在beforeEach块创建计算器的实例。如果我将它直接写入第一个describe块而不使用beforeEach块,它也可以正常工作。

我了解beforeEachafterEach的用户。但在这种情况下(或任何此类情况),我真的需要使用beforeEach哪里没有人更新Calculator实例,在每个规范中我们只使用calculator的方法?如果我使用beforeEach,它会在每次测试之前每次创建一个新实例。但是为什么我总是需要一个新的实例,其中没有一个测试用例不会更改/更新我的实例?

+0

当你的测试开始产生不同的结果时,你会做什么,当运行单挑而不是散装? –

回答

0

如果您将直接在describe中放入一行代码以创建计算器实例,而不使用beforeEach在这种情况下,实例将只创建一次(在测试用例运行开始时)。 但是,如果你将把beforeEach块,在这种情况下,将为每个单独的测试用例运行创建新的实例,所以每个测试用例将有一个新的实例。

对每个特定的测试用例都有一个新的实例是一个很好的做法。因为测试用例不应该依赖于另一个测试用例,这是大拇指规则。测试用例应始终以依赖顺序运行。

+0

这正是我的查询。为什么我总是需要一个新的实例,如果我的测试用例没有一个不依赖另一个,或者没有一个测试用例更新计算器实例?而且我不在这里维护任何状态。你能举出任何失败或不合适的例子! –

+0

是的,对于您当前的场景来说没问题,但这不是一个好习惯,因为如果其他人稍后在您的代码上跳转,并且他们开始编写依赖于实例的新测试用例,那么这将是一种情况,它失败。 –

相关问题