Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
AngularJS:注入导致测试出错_Angularjs_Karma Jasmine - Fatal编程技术网

AngularJS:注入导致测试出错

AngularJS:注入导致测试出错,angularjs,karma-jasmine,Angularjs,Karma Jasmine,我无法在测试中使用inject angular和angular mock都是version 1.3.14 我在这里完全迷路了。任何想法都将不胜感激 这会导致一个错误: describe("factory: Account", function () { var $httpBackend; var $rootScope; var Account; beforeEach(module('app')); beforeEach(inject(function

我无法在测试中使用
inject

angular
angular mock
都是
version 1.3.14

我在这里完全迷路了。任何想法都将不胜感激

这会导致一个错误:

describe("factory: Account", function () {

    var $httpBackend;
    var $rootScope;
    var Account;

    beforeEach(module('app'));

    beforeEach(inject(function() {
        // $httpBackend = _$httpBackend_;
    }));


    it("Should fetch account", function() {
    });
});
但如果我移除注入,它将通过:

describe("factory: Account", function () {

    var $httpBackend;
    var $rootScope;
    var Account;

    beforeEach(module('app'));

    beforeEach(function() {
        // $httpBackend = _$httpBackend_;
    });


    it("Should fetch account", function() {
    });
});
在Gruntfile.js中:

    karma: {
        unit: {
            options: {
                frameworks: ['jasmine'],
                singleRun: true,
                browsers: ['Safari'],
                files: [
                    'bower_components/angular/angular.js',
                    'bower_components/angular-mocks/angular-mocks.js',
                    'bower_components/moment/moment.js',
                    'bower_components/ckeditor/ckeditor.js',
                    'bower_components/ng-ckeditor/ng-ckeditor.min.js',
                    'app/app.js',
                    'app/**/*.js',
                ]
            }
        }
    }
以下是测试的输出:

Safari 8.0.5 (Mac OS X 10.10.3) factory: Account Should fetch account FAILED
    /.../bower_components/angular/angular.js:63:32
    /.../bower_components/angular/angular.js:4120:30
    forEach@/.../bower_components/angular/angular.js:323:24
    loadModules@/.../bower_components/angular/angular.js:4081:12
    createInjector@/.../bower_components/angular/angular.js:4007:22
    workFn@/.../bower_components/angular-mocks/angular-mocks.js:2353:60

我想你应该这样写:

describe("factory: Account", function () {
    var $httpBackend;
    var $rootScope;
    var Account;

    beforeEach(module('app'));

    beforeEach(function(_$httpBackend_) {
         $httpBackend = _$httpBackend_;
    });

    it("Should fetch account", function() {
    });
});

在使用它之前,您需要声明
$httpBackend

如果您删除了注入,它会工作,因为基本上它不会做任何事情

您需要注入,
$httpBackend
应该作为一个用下划线包装的参数传递:

describe("factory: Account", function () {

    var $httpBackend;
    var $rootScope;
    var Account;

    beforeEach(module('app'));

    beforeEach(inject(function(_$httpBackend_) {
        $httpBackend = _$httpBackend_;
    }));


    it("Should fetch account", function() {
    });
});

对我来说,这个问题仅仅是因为加载了两次角度模拟


该项目是使用Browserify编写的,最初的开发人员在vendor.js包中包含mock,并通过其配置将其加载到Karma中。一旦我从捆绑中移除了mock,只让Karma加载它,我就可以走了。

我也遇到了同样的问题。这也是一个依赖性问题,比如@user2755599,这篇文章帮助了我


基本上,错误消息可能被PhantomJS隐藏。切换到类似Chrome的浏览器来运行测试以获取更多信息。

这不是强制性的,只是为了方便起见,如果您想再次使用相同名称的变量,如您的示例所示