spyOn работает только один раз, даже если создан один раз для 'it' - PullRequest
0 голосов
/ 28 февраля 2020

Я пишу набор тестов с Karma & Jasmin.

"jquery": "3.4.1","karma": "4.1.0","karma-jasmine": "2.0.1","webpack": "4.25.1",

Структура выглядит следующим образом

import $ from 'jquery';
describe('My Test Suite', () => {
      
      beforeEach(done => {
          //some injectors & instantiations code
          done();
      });
      
      // A spyOn creator method which will create spy's on an API call & will return desired response.
     const createSpyForRequest = (serviceFacade,dynamicResponse) => {
        spyOn(serviceFacade.default, 'myAPICall').and.callFake(function (data, callback) {
            const response = {
                response: function () {
                    return {responseItems: dynamicResponse};
                }
            };
            callback(response);
        });
    };
    
    it('Test1', function (done) {
        let serviceFacade = require('../../../src/js/serviceFacade');
        createSpyForRequest(serviceFacade,[]);
        //call a method which will call serviceFacade.myAPICall
        expect(someThing).toBe(1);
    });
    
    it('Test2',function(done){
        let serviceFacade = require('../../../src/js/serviceFacade');
        const dynamicResponse = [{id:1}, {id:2}]
        createSpyForRequest(serviceFacade,dynamicResponse);
        //call a method which will call serviceFacade.myAPICall
        expect(someThing).toBe(2);
    });
});

Мой тест - он запускается асинхронно и происходит, когда шпион создается один раз. Поэтому, если мой Test1 запускается первым, мой ответ устанавливается на [], который затем используется и в Test2 (кажется, spyOn () для Test2 не вызывается), и наоборот. В любой момент времени один из тестов завершается неудачей.

Я также пытался уничтожить всех шпионов из Очистить шпионов , но это тоже не сработало.

I ' Я новичок в этом и не понимаю, как создавать spys и добавлять динамический c ответ для каждого теста.

...