angularjs茉莉测试:变量VM未找到 [英] angularjs jasmine tests: Variable vm not found

查看:199
本文介绍了angularjs茉莉测试:变量VM未找到的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

新来的角角和Jasmine测试。所以我写一个样本单元测试在我的控制器初始化时测试一个数组的长度。我希望数组是长度为0。然而,不知道我错过了什么,测试输出说,它无法找到变量 VM 我使用的参考数组。下面是我的测试:

New to angular and Jasmine tests in angular. So I am writing a sample unit test to test a length of an array upon initialization in my controller. I expect the array to be of length 0. However, not sure what I am missing, the test output says that it cannot find the variable vm I am using to refer to the array. Here is my test:

(function(){
'use strict';
describe('Testing UploadedReleasesController', function() {

    beforeEach(module('app.uploadedReleases'));

    describe('Testing uploaded releases controller', function(){
        var vm, controller;

        beforeEach(inject(function($controller, $rootScope){
            vm = $rootScope.$new();
            controller = $controller('UploadedReleasesController', {$scope:vm});
        }));
    });

    describe('album length', function(){
        it('it should test album length', function () {
            expect(vm.albums).toBeDefined();
            expect(vm.albums.length).toBe(0);
        });
    });

  });

})();

输出:测试UploadedReleasesController专辑长度应该测试专辑长度失败
    的ReferenceError:找不到变量:VM

有什么建议?

Output: Testing UploadedReleasesController album length it should test album length FAILED ReferenceError: Can't find variable: vm Any suggestions ?

修改
之后其他的反应,我修改了我的.spec文件和虚拟机未能够找到的错误消失。但现在我有一个不同的错误。这里是更新code:

(function(){
'use strict';
describe('Testing UploadedReleasesController', function() {
    var scope, controller;
    beforeEach(inject(function($controller, $rootScope){
        scope = $rootScope.$new();
        controller = $controller('UploadedReleasesController', {$scope:scope});
    }));
    beforeEach(module('app.uploadedReleases'));

    describe('album length', function(){
        it('it should test album length', function () {
            //expect(vm.albums).toBeDefined();
            expect(scope.albums.length).toBe(0);
        });
    });


   });

})();

Error:  `PhantomJS 1.9.8 (Mac OS X 0.0.0) Testing UploadedReleasesController true Should be true FAILED
Error: [ng:areq] Argument 'UploadedReleasesController' is not a function, got undefined
http://errors.angularjs.org/1.3.20/ng/areq?p0=UploadedReleasesController&p1=not%20a%20function%2C%20got%20undefined
undefined
    at assertArg (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:1590)
    at assertArgFn (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:1601)
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:8493
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:1916
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/uploadedReleases/uploaded-releases.controller.spec.js:10
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4219)
    at workFn (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:2475)
Error: Injector already created, can not register a module!`

另一个编辑:添加了奥斯卡的解决方案,这使得previous错误消失。现在我有一个问题。这里是我的实际控制人的定义:

(function (){

angular.module('app.uploadedReleases')
        .controller('UploadedReleasesController', UploadedReleasesController)
        .controller('ModalController', ModalController);

var ACTION = {
    CANCEL: 0,
    SAVE: 1,
    DELETE: 2,
    SUBMIT: 3
};

UploadedReleasesController.$inject = ['$log', '$scope', '$modal', 'ReleaseService', 'TrackService', 'APP_CONFIG'];
function UploadedReleasesController ($log, $scope, $modal, releaseService, trackService, APP_CONFIG){

所以ModalController是不存在在我的规范文件。这就是为什么我会收到以下错误?

So ModalController is not there in my spec file. Is that why I get the following error ?

`Error: [$injector:unpr] Unknown provider: $modalProvider <- $modal <- UploadedReleasesController
http://errors.angularjs.org/1.3.20/$injector/unpr?p0=%24modalProvider%20%3C-%20%24modal%20%3C-%20UploadedReleasesController
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4031
    at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178)
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4036
    at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178)
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4210)
    at instantiate (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4227)
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:8524
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:1916
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/uploadedReleases/uploaded-releases.controller.spec.js:12
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4219)
    at workFn (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:2475)
undefined
Expected undefined to be defined.
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/uploadedReleases/uploaded-releases.controller.spec.js:22
TypeError: 'undefined' is not an object (evaluating 'vm.albums.length')
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/uploa`

是这样,我该如何解决呢?

Is so, how do I resolve it ?

推荐答案

移动 beforeEach(注.... 直接在描述('测试UploadedReleasesController和实例变量: VAR虚拟机,控制器;

Move the beforeEach(inject.... directly inside describe('Testing UploadedReleasesController' and instantiate the variables: var vm, controller;

describe('Testing UploadedReleasesController', function() {
    var vm, controller;
    beforeEach(inject(....

每个在根套件(测试UploadedReleasesController)之前将在内部套房每次测试运行。内的套房也会有虚拟机和控制器变量availalbe。此外,我想创建一个重置变量未定义

更新:
移动专辑长度的套房里面'测试上传的版本控制:

Update: Move the 'album length' suite inside 'Testing uploaded releases controller':

(function(){
'use strict';
describe('Testing UploadedReleasesController', function() {

    beforeEach(module('app.uploadedReleases'));

    describe('Testing uploaded releases controller', function(){
        var vm, controller;

        beforeEach(inject(function($controller, $rootScope){
            vm = $rootScope.$new();
            controller = $controller('UploadedReleasesController', {$scope:vm});
        }));

        afterEach(function() {
            vm = undefined;
            controller = undefined;
        });

        describe('album length', function(){
            it('it should test album length', function () {
                expect(vm.albums).toBeDefined();
                expect(vm.albums.length).toBe(0);
            });
        });
    });

  });

})();

这篇关于angularjs茉莉测试:变量VM未找到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆