18

ジャスミン仕様を実行しようとすると、

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 です)

4

5 に答える 5

1

同じエラーが表示されました。の中にexpect直接声明がありましたdescribe。エラーが消えたブロックexpect内を移動しました。it

アイデアをくれたrinat-i​​o に感謝します。

于 2015-07-10T23:54:10.520 に答える
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 関数が記述ブロックにあることに注意してください。jasmine のコードを見ると、SpyOn がbeforeEachoritブロックにあることがわかります。

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 が it ブロックにあるため、これは機能します。お役に立てれば。

于 2014-10-14T20:36:23.517 に答える
0

angular-mocks.jsangular-scenario.jsの異なるバージョンの angular に問題があると思います。構成 が次のようになっている場合:

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_SCENARIOANGULAR_SCENARIO_ADAPTERを避けるようにしてください - 角度ソースに埋め込まれているものに置き換えてください ('../app/lib/angular/angular-scenario.js', '../app/lib/angular/jstd-scenario-私の場合は「../app/lib/angular/jstd-scenario-adapter-config.js」)。

于 2013-05-14T15:28:22.210 に答える
0

このつぶやきをチェックしてください。2 つの修正があり、1 つが役立つかもしれません (これらは、使用している getEnv() メソッドに関連しています。

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

そしてgithubのリンク:

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

たぶん、それらの1つがあなたの問題に光を当てるでしょう。

于 2015-03-02T16:00:25.547 に答える
0

この問題に直面していて、次の記事を見つけました。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 を使用してサイトを構築するときにこれに遭遇しました。 単体テスト モジュール中。

于 2015-06-05T21:37:53.453 に答える