8

Karma を使用して AngularJS の基本的な単体テストを実行しようとしています。私が書いたすべてのテストは、構文的に正しいようです。しかし、最も基本的なステップ、つまりコードの beforeEach 部分で問題が発生しています。テストを実行しようとすると、次の問題が発生します

TypeError: Cannot read property '$injector' of null
at Object.workFn (http://localhost:9876/absolute/Users/vesriram/Documents/AngularJS%20project/vendor/js/angular-mocks.js:1698:15)
at Object.<anonymous> (http://localhost:9876/adapter/lib/angular-scenario.js:26360:54)
at Array.forEach (native)
at Object.forEach (http://localhost:9876/adapter/lib/angular-scenario.js:9593:11)

私は過去 36 時間この問題を解決しようとしてきましたが、今のところうまくいきません。私が見る限り、この問題を抱えている人は他にいないようです。これは、私が何か愚かなことをしている可能性があると私に思わせます。あなたが私に与えることができる助けを本当に感謝します。必要な追加コードがあれば喜んで投稿します (公開する自由がある限り)。

関連するコードは次のとおりです-

app.js

var sell_page = angular.module("sell_page", ['ui.bootstrap']);

sell_page.controller('ItemTitleController', ['$scope','listingInformationService', '$location',function($scope, listingInformationService, $location) {
    $scope.itemNames = getAllItemNames();
    $scope.draftItems = getAllSavedDrafts();
    document.getElementById("categorySelection").style.visibility = "hidden";

    ------bunch of code-------
}]); 

controllersSpec.js

describe("Unit: Testing Controllers", function() {

beforeEach(angular.mock.module('sell_page'));

it('should have a ItemTitleController controller', function() {
    expect(sell_page.ItemTitleController).not.to.equal(null);
});


describe("ItemTitleController", function() {
    var scope;
    beforeEach(angular.mock.module('sell_page'));
    beforeEach(angular.mock.inject(function($rootScope, listingInformationService, $location, $controller) {
        var scope = $rootScope.$new();
        var controller = $controller('ItemTitleController', {
            $scope : scope
        });
    }));

    it("should display xxx properly", function() {
        --some code---
    });

});

カルマ.conf.js

basePath = '';

files = [
   JASMINE,
   JASMINE_ADAPTER,
   '../vendor/js/angular.min.js',
   '../vendor/js/angular.js',
   '../vendor/js/angular-mocks.js',
   '../vendor/js/angular-scenario.js',
   ANGULAR_SCENARIO,
   ANGULAR_SCENARIO_ADAPTER,
   '../app/js/*.js',
   'e2e/*.js',
   'midway/*.js',
   'unit/*.js',    
];

exclude = [
];

reporters = ['progress'];
port = 9876;
runnerPort = 9100;
colors = true;
logLevel = LOG_INFO;
autoWatch = true;
browsers = ['Chrome'];
captureTimeout = 60000;
singleRun = false;
4

3 に答える 3

0

問題が単にクローズされていない)か、}

それ以外では、問題をデバッグするアプローチは、問題がなくなるまで単純化することです。つまり、問題を「バイナリ検索」するまで、コードの大部分を少しずつ削除し始めます。

于 2014-04-02T23:48:03.347 に答える
0

同じ問題があります。

私の場合、このエラーは、Angular 1.0.8angular-mocks 1.0.8を新しいバージョンの Jasmine (2.0.0+、実際にはそれほど新しいものではない) で使用すると発生します。

angular-mock は Jasmine の内部変数を想定しており、新しいバージョンにはもう存在しません。詳細については、このhttps://github.com/angular/angular.js/issues/5632を参照してください。

解決策は、Angular をアップグレードするか (私の場合は不可能です)、Jasmine をダウングレードすることです。

Grunt を使用して karma を実行している場合、karma-jasmine をバージョン '~0.1.0' にダウングレードすると、この問題が修正されます。このバージョンには jasmine が含まれているため、devDependencies から「jasmine-core」も削除する必要があります。以下の devDependencies のセットは私にとってはうまくいきました。

"devDependencies": {
    "grunt-karma": "^0.10.1",
    "karma": "^0.12.31",
    "karma-chrome-launcher": "^0.1.7",
    "karma-coverage": "^0.2.7",
    "karma-jasmine": "~0.1.0",
    "karma-junit-reporter": "^0.2.2",
    "karma-phantomjs-launcher": "^0.1.4",
    "phantomjs": "^1.9.15",
}
于 2015-05-27T15:57:51.047 に答える