2016-09-02 7 views
3

У меня есть приложение, которое вызывает нечетную ошибку при выполнении тестов. Ошибка заключается в следующем:Karma/Jasmine/PhantomJs: undefined не является конструктором

TypeError: undefined is not a constructor (evaluating 'allKeys[i].match(/^[0-9]+$/)') in node_modules/jasmine-core/lib/jasmine-core/jasmine.js (line 2988) 
test/spec/core/http/response-spec.js:92:63 
[email protected]://localhost:8080/context.js:151:17 

Большинство из этих тестов проходит, но очень мало перерывов. Вот один из теста, который расщепляет:

(function() { 
    'use strict'; 

    describe('MyAccount.core.http.response', function() { 
    var ResponseInterceptor = {}, 
     $httpProvider = {}, 
     $window = {}, 
     env = {}, 
     MessageQueue = {}; 

    beforeEach(module('MyAccount.core.environment')); 
    beforeEach(module('MyAccount.core.http', function (_$httpProvider_, $provide) { 
     $httpProvider = _$httpProvider_; 

     MessageQueue = { 
     dispatch: jasmine.createSpy('dispatch') 
     }; 

     $window = { 
     location: { 
      href: jasmine.createSpy() 
     } 
     }; 

     $provide.value('$window', $window); 
     $provide.value('MessageQueue', MessageQueue); 
    })); 
    beforeEach(inject(function (_$window_, _ResponseInterceptor_, _env_) { 
     $window = _$window_; 
     ResponseInterceptor = _ResponseInterceptor_; 
     env = _env_; 
    })); 

    describe('response status', function() { 
     // Asserting that 404 and 403 errors are intercepted. 
     angular.forEach([404, 403], function (error) { 
     describe('is ' + error, function() { 
      beforeEach(function() { 
      ResponseInterceptor.responseError({ 
       status: error, 
       data: { 
       message: 'error ' + error 
       } 
      }); 
      }); 

      it('calls MessageQueue.dispatch with the error message', function() { 
      expect(MessageQueue.dispatch).toHaveBeenCalledWith('error ' + error, { 
       on: 'global.errors' 
      }); 
      }); 
     }); 
     }); 
    }); 
    }); 
})(); 

я застрял на том, что в течение нескольких часов в настоящее время и не может, кажется, найти решение. Вот зависимости я использую и их версии:

  • карма: ^1.2.0
  • жасмин-ядро: ^2.5.0
  • карма-жасмин: ^1.0.2
  • карма-phantomjs-пусковая: ^1.0.2
  • phantomjs: ^2.1.7

ПРИМЕЧАНИЕ: Это бренд новое приложение yeoman с использованием углового генератора.

+0

Вы не единственный, у меня такая же проблема на этой неделе, и я в настоящее время отлаживаю ее. В моем случае я использую Maven/frontend-maven-plugin/Jasmine-Core/PhantomJS То, что я нашел до сих пор, в моем случае: это равные массивы, которые терпят неудачу. Да, равные массивы! Если у массивов есть отличия, тест не проходит обычным способом ([«a», 12] не равно [«b», 56]). Но все работает, если я запускаю Karma вручную в IntelliJ. Он не использует то же самое Jasmine Core (удаление Jasmine-Core, используемое Maven, не помешало ручному запуску), поэтому я думаю, что Jasmine-Core является виновником. –

+0

Не могли бы вы подтвердить, что равные массивы - это те, которые не соответствуют вашим? –

+0

@Darth_Sygnious У меня такая же проблема с массивом. В противном случае, если сравнивать с чем-то другим. Я попытаюсь понизить/обновить JasmineCore, чтобы убедиться, что это возможная причина ошибки. – lkartono

ответ

3

У меня была такая же проблема, но она была решена несколько мгновений назад.

Повторить то, что я сказал в комментариях: Ошибка возникает, когда у вас есть два массива, которые являются равными, верьте или нет. Если они неравны, вы получаете стандартную ошибку с показанными различиями.

жасмин-сердечник 2.5.0. был опубликован два дня назад, с этого момента. Я понизил рейтинг до 2.4.1, и он работает.

Кажется, что 2.5.0. является виновником.

Перейти на версию 2.4.1., Пока издатель не решит его.

Моя установка: Maven/интерфейс-Maven-плагин/карма (*)/phantomJS

(*) может, вероятно, сказал: 'Жасмин' здесь.

+0

Как я уже сказал в своем предыдущем комментарии, понижение может быть решением. Вы решили моего проблемного человека, не можете вас поблагодарить достаточно :) – lkartono

+0

спасибо за это. переход на «2.4.1» сделал трюк. – davidwickman

+1

[Жасмин 2.5.1] (https://github.com/jasmine/jasmine/blob/master/release_notes/2.5.1.md), выпущенный 9 сентября 2016 года, исправляет эту проблему. – Todd