当我尝试运行我的茉莉花规格时,我得到了
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项目中的茉莉花宝石)
答案 0 :(得分:1)
我看到同样的错误。我在expect
内直接发表了describe
声明。我将expect
移到it
块内,错误就消失了。
感谢rinat-io的想法。
答案 1 :(得分:0)
我认为问题出现在 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 - 将其替换为嵌入角度源的内容('../app/lib/angular/angular-scenario。在我的例子中,js','.. / app / lib / angular / jstd-scenario-adapter.js','.. / app / lib / angular / jstd-scenario-adapter-config.js'。
答案 2 :(得分: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函数位于describe块中。查看jasmine代码时,我们发现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在它的块中。 希望这会有所帮助。
答案 3 :(得分:0)
查看这条推文,它有两个修复可能有一个帮助你(它们与你正在使用的getEnv()方法有关:
https://twitter.com/dfkaye/statuses/423913741374074880
github链接:
https://github.com/dfkaye/jasmine-intercept https://github.com/dfkaye/jasmine-where
也许其中一个会揭示你的问题。
答案 4 :(得分:0)
我遇到了这个问题并找到了以下文章。 好像茉莉花版和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构建网站。在单元测试模块中。