Ответ 1
Я видел ту же ошибку. У меня был оператор expect
непосредственно внутри describe
. Я переместил expect
внутри блока it
, и ошибка исчезла.
Благодаря rinat-io за идею.
Когда я пытаюсь запустить мои спецификации жасмина, я получаю
TypeError: jasmine.getEnv().currentSpec is null in
http://localhost:8888/__JASMINE_ROOT__/jasmine.js (line 498)
Не знаю, почему, даже не знаю, с чего начать искать.
Строка 498:
return jasmine.getEnv().currentSpec.expect(actual);
Я занимаюсь жасмином уже несколько месяцев, но не в этом проекте. Я никогда раньше не видел этого.
Итак, с чего начать?
(Это жемчужный жемчуг в проекте rails 3.x)
Я видел ту же ошибку. У меня был оператор expect
непосредственно внутри describe
. Я переместил expect
внутри блока it
, и ошибка исчезла.
Благодаря rinat-io за идею.
Я думаю, проблема в разных версиях angular в angular -mocks.js и angular -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 - замените его на те, которые встроены в ваш источник angular ('../app/lib/angular/angular-scene.js ','../app/lib/angular/jstd-scenario-adapter.js ','../app/lib/angular/jstd-scenario-adapter-config.js ' в моем случае).
Как выглядит ваш полный тест? Я также получил эту ошибку. Мой тест выглядел так:
'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 находится в этом блоке. Надеюсь, это поможет.
Проверьте этот твит, у него есть два исправления, возможно, один поможет вам (они связаны с методом getEnv(), который вы используете:
https://twitter.com/dfkaye/statuses/423913741374074880
И ссылки github:
https://github.com/dfkaye/jasmine-intercept https://github.com/dfkaye/jasmine-where
Возможно, один из них прояснит вашу проблему.
Я столкнулся с этой проблемой и нашел следующую статью. Кажется, что версия jasmine и версии Angular не работали вместе. Когда я сделал изменения, статья очерчена до 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. Во время модуля тестирования модуля.