Модульное тестирование ES6 обещает (.then, .catch)

Я использую AngularJS и ES6, поэтому я хочу написать модульный тест для ES6 (не используя angular.mock ...), вот как я пытался его протестировать. но проблема в том, it('resolves its promise with the current data' это терпит неудачу с

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Я удалил done() основанный на этом, но тест всегда проходит, не имеет значения toEqual какие!. возможно переменная ответа не установлена ​​правильно.

У кого-нибудь есть идеи?

data.service.js

    export class DataService {
     'ngInject';
      constructor($log, $http) {
        this.$log = $log;
        this.$http = $http;
      }
      getData(url, name) {
        return this.$http.get(url)
          .then((response) => {
            return {data: response.data, version: response.version)};
          })
          .catch((error) => {
            this.$log.error('Failed for getData.\n' + angular.toJson(error.data, true));
            throw error.data || {};
          });
       }
    }

data.service-spec.js

import {DataService} from './data.service';

let sysUnderTest, mapSelectionServiceMock, http;

describe('http.get', () => {
  let temperaturePromise;
  let promiseHelper;
  let getDataPromise;

  beforeEach(() => {
    let fetchPromise = new Promise((resolve, reject) => {
      promiseHelper = {
        resolve: resolve,
        reject: reject
      };
    });

    // http mock
    http = {
      get: () => {}
    };
    spyOn(http, 'get').and.returnValue(fetchPromise);
    sysUnderTest = new DataService(null, http, null, null, null);
    getDataPromise = sysUnderTest.getData('sampleURL');
  });

  it('getData', () => {
    expect(http.get).toHaveBeenCalled();
    expect(getDataPromise).toEqual(jasmine.any(Promise));
  });

  describe('on successful get', function() {
    beforeEach(function() {
      let response = new Response(JSON.stringify({
        data: 78,
        version: 1
      }));
      promiseHelper.resolve(response);
    });

    it('resolves its promise with the current data', function(done) {
        getDataPromise.then(function(data) {
          expect(data).toEqual(79987);
          done();
        });
    });
  });
});

0 ответов

Другие вопросы по тегам