Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:jasmine.getEnv().currentSpec为空_Javascript_Ruby On Rails_Jasmine_Typeerror - Fatal编程技术网

Javascript TypeError:jasmine.getEnv().currentSpec为空

Javascript TypeError:jasmine.getEnv().currentSpec为空,javascript,ruby-on-rails,jasmine,typeerror,Javascript,Ruby On Rails,Jasmine,Typeerror,当我尝试运行我的茉莉花规格时,我得到 TypeError: jasmine.getEnv().currentSpec is null in http://localhost:8888/__JASMINE_ROOT__/jasmine.js (line 498) 不知道为什么,甚至不知道从哪里开始寻找 第498行是: return jasmine.getEnv().currentSpec.expect(actual); 我已经做茉莉花几个月了,但不是在这个项目上。我以前从未见过这种情

当我尝试运行我的茉莉花规格时,我得到

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项目中的jasmine gem)

我认为问题出在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'
];
'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);
  });
});

尝试避免角度场景角度场景适配器-将其替换为嵌入角度源的适配器(“../app/lib/ANGULAR/ANGULAR SCENARIO.js”,“../app/lib/ANGULAR/jstd SCENARIO ADAPTER.js”,“在我的例子中,../app/lib/ANGULAR/jstd SCENARIO ADAPTER config.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'
];
'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函数位于descripe块中。当查看jasmine代码时,我们发现SpyOn应该在每个之前或
块之前处于一个
中:

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;
};

这些是设置
currentSpec
的位置。否则该值将为空。 因此,在我的示例中,应该是:

'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);
  });
});
然后这会起作用,因为间谍在it区。
希望这有帮助。

查看这条推文,它有两个修复程序,可能有一个可以帮助您解决问题(它们与您正在使用的getEnv()方法有关:

以及github链接:


也许其中的一篇文章能说明你的问题。

我无意中发现了这篇文章,并找到了以下文章。 jasmine版本和Angular版本似乎不在一起工作。当我对Angular-mocks.js进行更改时,错误消失了


我在参加PluralSight课程时遇到了这个问题:使用Bootstrap、AngularJS、ASP.NET、EF和Azure构建一个站点。在单元测试模块期间。

我看到了同样的错误。我在
描述
中直接有一个
expect
语句。我将
expect
移到
块中,错误消失了走开


感谢您的想法。

我也遇到了同样的问题,当时我在测试中错误地编写了
descripe
而不是
it
。我不认为是这样,因为我在本地机器上运行了它,它似乎运行得很好。我在隧道ssh会话上运行了它。也许这与此有关,但它不应该有。但它确实如此。@rinat.io t汉克!这就是我的问题!“萨蒂亚,你到底解决了你的问题吗?你会考虑把它作为答案吗?它没有解决。我停止尝试像这样远程运行茉莉花。我不认为我在使用角。我使用因果报应,茉莉花进行角度应用程序测试。按照你的建议,但仍然有同样的问题:茉莉花。.currentSpec为空。没有任何间谍。要帮助人们完全回答此问题,请发布完整的示例规范。可能还有其他函数正在尝试设置
此.currentSpec
失败。我遇到了相同的错误,这是解决方案,希望它能帮助其他人。