2012-06-10 2 views
18

Когда я пытаюсь запустить мой жасмин спецификации, я получаюTypeError:. Jasmine.getEnv() currentSpec равна нулю

TypeError: jasmine.getEnv().currentSpec is null in 
    http://localhost:8888/__JASMINE_ROOT__/jasmine.js (line 498) 

не знаю, почему, даже не знаю, где начать смотреть.

Line 498 является:

return jasmine.getEnv().currentSpec.expect(actual); 

Я делал жасмин в течение нескольких месяцев, но не по этому проекту. Я никогда раньше этого не видел.

Итак, с чего начать?

(Это жасмино камень в проекте рельсы 3.x)

+7

У меня была такая же проблема, когда я ошибочно написал 'описать' вместо' it' в моих тестах. –

+0

Я не думаю, что это было, поскольку я запустил его в своей локальной коробке, и это, казалось, сработало. Я запускал это на туннелированной сессии ssh. Может быть, это что-то с этим связано, но этого не должно было быть. Но это было так. – Satya

+0

@ rinat.io Спасибо! Это была проблема для меня! –

ответ

0

Я думаю, что проблема в разных версиях углового в угловых mocks.js и углового-scenario.js Если ваш конфигурации выглядит следующим образом:

files = [ 
    JASMINE, 
    JASMINE_ADAPTER, 
    '../app/lib/angular/angular.js', 
// ANGULAR_SCENARIO, 
// ANGULAR_SCENARIO_ADAPTER, 
    '../app/lib/angular/angular-scenario.js', 
    '../app/lib/angular/jstd-scenario-adapter.js', 
    '../app/lib/angular/jstd-scenario-adapter-config.js', 
    '../app/lib/angular/angular-mocks.js', 
    '../app/lib/angular/angular-resource.js', 
    '../app/lib/angular/angular-cookies.js', 
    '../app/js/**/*.js', 
    '**/*Spec.js' 
]; 

пытаются избежать ANGULAR_SCENARIO и ANGULAR_SCENARIO_ADAPTER - заменить его те, которые встроены в ваш угловой источник ('../app/lib/angular/angular-scenario.js', '../app/lib/angular/jstd-scenario-adapter.js', '../app/lib /angular/jstd-scenario-adapter-config.js 'в моем случае).

+0

Я не думаю, что использую угловой. – Satya

+0

Я использую карму, жасмин для тестов на угловое приложение. Последовали за советом, но по-прежнему имеют такую ​​же проблему: jasmine.getEnv(). CurrentSpec имеет значение null. – asa

0

Как выглядит ваш полный тест? Я также получил эту ошибку. Мой тест был таким:

'use strict'; 

describe("CalendarController", function() { 
    var scope, $location, $controller, createController; 
    var baseTime = new Date(2014, 9, 14); 
    spyOn(Date.prototype, 'getMonth').andReturn(baseTime.getMonth()); 
    spyOn(Date.prototype, 'getDate').andReturn(baseTime.getDate()); 
    spyOn(Date.prototype, 'getFullYear').andReturn(baseTime.getFullYear()); 
    var expectedMonth = fixture.load("months.json")[0]; 

    beforeEach(module('calendar')); 

    beforeEach(inject(function ($injector) { 
    scope = $injector.get('$rootScope').$new(); 
    $controller = $injector.get('$controller'); 

    createController = function() { 
     return $controller('CalendarController', { 
     '$scope': scope 
     }); 
    }; 
    })); 

    it('should load the current month with days', function(){ 
    var controller = createController(); 
    expect(scope.month).toBe(expectedMonth); 
    }); 
}); 

Обратите внимание, что функция SpyOn находится в описываемом блоке. Глядя на коде жасмина мы находим, что SpyOn должно быть в блоке beforeEach или it:

jasmine.Env.prototype.it = function(description, func) { 
    var spec = new jasmine.Spec(this, this.currentSuite, description); 
    this.currentSuite.add(spec); 
    this.currentSpec = spec; 

    if (func) { 
    spec.runs(func); 
    } 

    return spec; 
}; 

...

jasmine.Env.prototype.beforeEach = function(beforeEachFunction) { 
    if (this.currentSuite) { 
    this.currentSuite.beforeEach(beforeEachFunction); 
    } else { 
    this.currentRunner_.beforeEach(beforeEachFunction); 
    } 
}; 

Это место, где currentSpec установлен. В противном случае это будет null. Так что в моем примере это должно быть:

'use strict'; 

describe("CalendarController", function() { 
    var scope, $location, $controller, createController; 
    var baseTime = new Date(2014, 9, 14); 
    var expectedMonth = fixture.load("months.json")[0]; 

    beforeEach(module('calendar')); 

    beforeEach(inject(function ($injector) { 
    scope = $injector.get('$rootScope').$new(); 
    $controller = $injector.get('$controller'); 

    createController = function() { 
     return $controller('CalendarController', { 
     '$scope': scope 
     }); 
    }; 
    })); 

    it('should load the current month with days', function(){ 
    spyOn(Date.prototype, 'getMonth').andReturn(baseTime.getMonth()); 
    spyOn(Date.prototype, 'getDate').andReturn(baseTime.getDate()); 
    spyOn(Date.prototype, 'getFullYear').andReturn(baseTime.getFullYear()); 

    var controller = createController(); 
    expect(scope.month).toBe(expectedMonth); 
    }); 
}); 

И тогда это будет работать, потому что spyOn в ИТ-блока. Надеюсь, это поможет.

+0

Не было шпионов. – Satya

+0

Чтобы помочь людям полностью ответить на этот вопрос, следует опубликовать полный пример спецификации. Могут быть другие функции, которые пытаются установить «this.currentSpec», которые не работают. Я получал ту же ошибку, и это было решение, надеюсь, это помогает кому-то другому. – earlonrails

0

Заканчивать этот твит, он имеет два исправления, может быть, один помогает вам (они связаны с методом GetEnv(), который вы используете:

https://twitter.com/dfkaye/statuses/423913741374074880

И на GitHub ссылки:

https://github.com/dfkaye/jasmine-intercept https://github.com/dfkaye/jasmine-where

Может быть, один из тех, кто будет пролить свет на вашу проблему.

0

Я столкнулся с этой проблемой и нашел следующую статью. Кажется, что версия жасмина и угловые версии не работали вместе.Когда я сделал изменения, статья очерчивается на angular-mocks.js, ошибка исчезла.

http://railsware.com/blog/2014/09/09/make-angularjs-1-0-7-work-with-jasmine-2-0/

Я столкнулся с этим, беря курс Pluralsight: Создание сайта с Bootstrap, AngularJS, ASP.NET, EF и Azure. Во время модуля тестирования модуля.

1

Я видел ту же ошибку. У меня было заявление expect прямо внутри describe. Я переместил expect внутри блока it, и ошибка исчезла.

rinat-io Идея.

Смежные вопросы