茉莉花中的错误已发现如何修复功能

时间:2019-05-13 18:50:08

标签: javascript jasmine karma-jasmine jasmine-jquery jasmine2.0

我有3个测试,每个测试各种方法。

it('test function1', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function1
   expect(document.getElementById).toHaveBeenCalled();

 });

it('test function2', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function2
   expect(document.getElementById).toHaveBeenCalled();

 });

it('test function3', function() {
   spyOn(document, 'getElementById');
   // ... some code to test function3
   expect(document.getElementById).toHaveBeenCalled();    
 });

但是,当我运行这些测试时,出现以下错误:getElementById has already been spied upon。有人可以解释为什么即使间谍在不同的测试套件中我也得到此错误,以及如何解决它。

1 个答案:

答案 0 :(得分:0)

一旦窥探一个方法,就无法再次窥探它。如果您要做的只是检查每次测试中是否都调用过该方法,只需在测试开始时创建间谍,然后在afterEach中重置调用即可:

     spyOn(document, 'getElementById');

     afterEach(() => {
       document.getElementById.calls.reset();
     });

     it('test function1', function() {
       // ... some code to test function1
       expect(document.getElementById).toHaveBeenCalled();

     });

    it('test function2', function() {
       // ... some code to test function2
       expect(document.getElementById).toHaveBeenCalled();

     });

    it('test function3', function() {
       // ... some code to test function3
       expect(document.getElementById).toHaveBeenCalled();    
     });