2013-06-26 12 views
39

पर कॉल करते समय कार्य "कर्म" नहीं मिला है, मैं एंगुलरजेएस, के लिए यमन के साथ एक विकास वातावरण स्थापित करने की कोशिश कर रहा हूं, मैंने निर्देशों के अनुसार यमन स्थापित किया: sudo npm install -g yo bower grunt-cli generator-angular और मैं एक नया उत्पन्न कर रहा हूं yo angular के साथ ऐप।जेनरेटर-कोणीय: 'ग्रंट टेस्ट'

एप्लिकेशन के बाद उत्पन्न होता है, karma start चल कर्म सर्वर प्रारंभ करता है, लेकिन

Loading "grunt-karma.js" tasks...ERROR 
>> TypeError: object is not a function 
Warning: Task "karma" not found. Use --force to continue. 

Aborted due to warnings. 

में grunt test परिणाम मैं इसे इस तरह ठीक है चल रहा है?

संपादित करें: कुछ फ़ाइलें (Yeoman से ताजा उत्पन्न)

Gruntfile.js:

'use strict'; 
var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet; 
var mountFolder = function (connect, dir) { 
    return connect.static(require('path').resolve(dir)); 
}; 

module.exports = function (grunt) { 
    // load all grunt tasks 
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); 

    // configurable paths 
    var yeomanConfig = { 
    app: 'app', 
    dist: 'dist' 
    }; 

    try { 
    yeomanConfig.app = require('./component.json').appPath || yeomanConfig.app; 
    } catch (e) {} 

    grunt.initConfig({ 
    yeoman: yeomanConfig, 
    watch: { 
     coffee: { 
     files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'], 
     tasks: ['coffee:dist'] 
     }, 
     coffeeTest: { 
     files: ['test/spec/{,*/}*.coffee'], 
     tasks: ['coffee:test'] 
     }, 
     compass: { 
     files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], 
     tasks: ['compass'] 
     }, 
     livereload: { 
     files: [ 
      '<%= yeoman.app %>/{,*/}*.html', 
      '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', 
      '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', 
      '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' 
     ], 
     tasks: ['livereload'] 
     } 
    }, 
    connect: { 
     options: { 
     port: 9000, 
     // Change this to '0.0.0.0' to access the server from outside. 
     hostname: 'localhost' 
     }, 
     livereload: { 
     options: { 
      middleware: function (connect) { 
      return [ 
       lrSnippet, 
       mountFolder(connect, '.tmp'), 
       mountFolder(connect, yeomanConfig.app) 
      ]; 
      } 
     } 
     }, 
     test: { 
     options: { 
      middleware: function (connect) { 
      return [ 
       mountFolder(connect, '.tmp'), 
       mountFolder(connect, 'test') 
      ]; 
      } 
     } 
     } 
    }, 
    open: { 
     server: { 
     url: 'http://localhost:<%= connect.options.port %>' 
     } 
    }, 
    clean: { 
     dist: { 
     files: [{ 
      dot: true, 
      src: [ 
      '.tmp', 
      '<%= yeoman.dist %>/*', 
      '!<%= yeoman.dist %>/.git*' 
      ] 
     }] 
     }, 
     server: '.tmp' 
    }, 
    jshint: { 
     options: { 
     jshintrc: '.jshintrc' 
     }, 
     all: [ 
     'Gruntfile.js', 
     '<%= yeoman.app %>/scripts/{,*/}*.js' 
     ] 
    }, 
    karma: { 
     unit: { 
     configFile: 'karma.conf.js', 
     singleRun: true 
     } 
    }, 
    coffee: { 
     dist: { 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.app %>/scripts', 
      src: '{,*/}*.coffee', 
      dest: '.tmp/scripts', 
      ext: '.js' 
     }] 
     }, 
     test: { 
     files: [{ 
      expand: true, 
      cwd: 'test/spec', 
      src: '{,*/}*.coffee', 
      dest: '.tmp/spec', 
      ext: '.js' 
     }] 
     } 
    }, 
    compass: { 
     options: { 
     sassDir: '<%= yeoman.app %>/styles', 
     cssDir: '.tmp/styles', 
     imagesDir: '<%= yeoman.app %>/images', 
     javascriptsDir: '<%= yeoman.app %>/scripts', 
     fontsDir: '<%= yeoman.app %>/styles/fonts', 
     importPath: '<%= yeoman.app %>/components', 
     relativeAssets: true 
     }, 
     dist: {}, 
     server: { 
     options: { 
      debugInfo: true 
     } 
     } 
    }, 
    concat: { 
     dist: { 
     files: { 
      '<%= yeoman.dist %>/scripts/scripts.js': [ 
      '.tmp/scripts/{,*/}*.js', 
      '<%= yeoman.app %>/scripts/{,*/}*.js' 
      ] 
     } 
     } 
    }, 
    useminPrepare: { 
     html: '<%= yeoman.app %>/index.html', 
     options: { 
     dest: '<%= yeoman.dist %>' 
     } 
    }, 
    usemin: { 
     html: ['<%= yeoman.dist %>/{,*/}*.html'], 
     css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], 
     options: { 
     dirs: ['<%= yeoman.dist %>'] 
     } 
    }, 
    imagemin: { 
     dist: { 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.app %>/images', 
      src: '{,*/}*.{png,jpg,jpeg}', 
      dest: '<%= yeoman.dist %>/images' 
     }] 
     } 
    }, 
    cssmin: { 
     dist: { 
     files: { 
      '<%= yeoman.dist %>/styles/main.css': [ 
      '.tmp/styles/{,*/}*.css', 
      '<%= yeoman.app %>/styles/{,*/}*.css' 
      ] 
     } 
     } 
    }, 
    htmlmin: { 
     dist: { 
     options: { 
      /*removeCommentsFromCDATA: true, 
      // https://github.com/yeoman/grunt-usemin/issues/44 
      //collapseWhitespace: true, 
      collapseBooleanAttributes: true, 
      removeAttributeQuotes: true, 
      removeRedundantAttributes: true, 
      useShortDoctype: true, 
      removeEmptyAttributes: true, 
      removeOptionalTags: true*/ 
     }, 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.app %>', 
      src: ['*.html', 'views/*.html'], 
      dest: '<%= yeoman.dist %>' 
     }] 
     } 
    }, 
    cdnify: { 
     dist: { 
     html: ['<%= yeoman.dist %>/*.html'] 
     } 
    }, 
    ngmin: { 
     dist: { 
     files: [{ 
      expand: true, 
      cwd: '<%= yeoman.dist %>/scripts', 
      src: '*.js', 
      dest: '<%= yeoman.dist %>/scripts' 
     }] 
     } 
    }, 
    uglify: { 
     dist: { 
     files: { 
      '<%= yeoman.dist %>/scripts/scripts.js': [ 
      '<%= yeoman.dist %>/scripts/scripts.js' 
      ] 
     } 
     } 
    }, 
    rev: { 
     dist: { 
     files: { 
      src: [ 
      '<%= yeoman.dist %>/scripts/{,*/}*.js', 
      '<%= yeoman.dist %>/styles/{,*/}*.css', 
      '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
      '<%= yeoman.dist %>/styles/fonts/*' 
      ] 
     } 
     } 
    }, 
    copy: { 
     dist: { 
     files: [{ 
      expand: true, 
      dot: true, 
      cwd: '<%= yeoman.app %>', 
      dest: '<%= yeoman.dist %>', 
      src: [ 
      '*.{ico,txt}', 
      '.htaccess', 
      'components/**/*', 
      'images/{,*/}*.{gif,webp}', 
      'styles/fonts/*' 
      ] 
     }] 
     } 
    } 
    }); 

    grunt.renameTask('regarde', 'watch'); 

    grunt.registerTask('server', [ 
    'clean:server', 
    'coffee:dist', 
    'compass:server', 
    'livereload-start', 
    'connect:livereload', 
    'open', 
    'watch' 
    ]); 

    grunt.registerTask('test', [ 
    'clean:server', 
    'coffee', 
    'compass', 
    'connect:test', 
    'karma' 
    ]); 

    grunt.registerTask('build', [ 
    'clean:dist', 
    'jshint', 
    'test', 
    'coffee', 
    'compass:dist', 
    'useminPrepare', 
    'imagemin', 
    'cssmin', 
    'htmlmin', 
    'concat', 
    'copy', 
    'cdnify', 
    'ngmin', 
    'uglify', 
    'rev', 
    'usemin' 
    ]); 

    grunt.registerTask('default', ['build']); 
}; 

karma.conf.js:

// Karma configuration 

// base path, that will be used to resolve files and exclude 
basePath = ''; 

// list of files/patterns to load in the browser 
files = [ 
    JASMINE, 
    JASMINE_ADAPTER, 
    'app/components/angular/angular.js', 
    'app/components/angular-mocks/angular-mocks.js', 
    'app/scripts/*.js', 
    'app/scripts/**/*.js', 
    'test/mock/**/*.js', 
    'test/spec/**/*.js' 
]; 

// list of files to exclude 
exclude = []; 

// test results reporter to use 
// possible values: dots || progress || growl 
reporters = ['progress']; 

// web server port 
port = 8080; 

// cli runner port 
runnerPort = 9100; 

// enable/disable colors in the output (reporters and logs) 
colors = true; 

// level of logging 
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 
logLevel = LOG_INFO; 

// enable/disable watching file and executing tests whenever any file changes 
autoWatch = false; 

// Start these browsers, currently available: 
// - Chrome 
// - ChromeCanary 
// - Firefox 
// - Opera 
// - Safari (only Mac) 
// - PhantomJS 
// - IE (only Windows) 
browsers = ['Chrome']; 

// If browser does not capture in given timeout [ms], kill it 
captureTimeout = 5000; 

// Continuous Integration mode 
// if true, it capture browsers, run tests and exit 
singleRun = false; 

परीक्षा/कल्पना/नियंत्रक/मुख्य। जेएस:

'use strict'; 

describe('Controller: MainCtrl', function() { 

    // load the controller's module 
    beforeEach(module('testApp')); 

    var MainCtrl, 
    scope; 

    // Initialize the controller and a mock scope 
    beforeEach(inject(function ($controller, $rootScope) { 
    scope = $rootScope.$new(); 
    MainCtrl = $controller('MainCtrl', { 
     $scope: scope 
    }); 
    })); 

    it('should attach a list of awesomeThings to the scope', function() { 
    expect(scope.awesomeThings.length).toBe(3); 
    }); 
});'use strict'; 

describe('Controller: MainCtrl', function() { 

    // load the controller's module 
    beforeEach(module('testApp')); 

    var MainCtrl, 
    scope; 

    // Initialize the controller and a mock scope 
    beforeEach(inject(function ($controller, $rootScope) { 
    scope = $rootScope.$new(); 
    MainCtrl = $controller('MainCtrl', { 
     $scope: scope 
    }); 
    })); 

    it('should attach a list of awesomeThings to the scope', function() { 
    expect(scope.awesomeThings.length).toBe(3); 
    }); 
}); 
+0

आप अपने Gruntfile, परीक्षण फ़ाइल साझा कर सकते हैं, और कुछ भी प्रासंगिक है? – Stephen

+0

मैंने Grunfile.js, karma.conf.js और प्रश्न के लिए एक परीक्षण उदाहरण जोड़ा, वे सभी योन जनरेटर –

+0

@ गैलेबेन-हैम से नोड/एनपीएम का संस्करण कौन सा चल रहा है? मैं अपने नोड संस्करण को अपग्रेड करके इस समस्या को हल करने में सक्षम था। विवरण के लिए मेरा जवाब देखें। –

उत्तर

88
npm install grunt-karma --save-dev 

या आप इसे https://npmjs.org/package/grunt-karma

+2

इसके अलावा मुझे कर्म-फैंटोम्ज-लॉन्चर और कर्म-जैस्मीन स्थापित करना पड़ा: एनपीएम इंस्टॉल ग्रंट-कर्म कर्म-फैंटोमज-लॉन्चर कर्म-जैस्मीन - सेव-देव – Carlos

+3

यही मुझे जोड़ना था: 'npm इंस्टॉल grunt-karma कर्म कर्म-फैंटोमज-लॉन्चर कर्म-जैस्मीन जैस्मीन-कोर प्रेतोज़ - सेव-देव' –

17

पर जरूरत

sudo npm install grunt-karma --save-dev 
डॉक्स से

npm install grunt-karma --save-dev 

चलाने के बाद अगर

grunt.loadNpmTasks('grunt-karma'); 

इस काम करता है Gruntfile.js में निम्नलिखित पंक्ति जोड़ मेरे लिए।

+3

क्या कोणीय जनरेटर को पैकेज.जेसन में शामिल करने के लिए तय नहीं किया जाना चाहिए? – jedmao

+3

लो और देखें https://github.com/yeoman/generator-angular/issues/515 – jedmao

+4

आपको 'loadNpmTasks' कमांड जोड़ने की आवश्यकता नहीं होगी, क्योंकि आपने इसे package.json और Gruntfile.js कॉल में रखा है 'की आवश्यकता है (' लोड-ग्रंट-वर्क्स ') (ग्रंट); ' – Kato

4

पहले से पोस्ट किए गए स्पष्ट उत्तर मेरे लिए पूरी तरह से अनुपयोगी थे। यदि एनपीएम के माध्यम से ग्रंट-कर्मा को पुनर्स्थापित करना काम नहीं करता है, और Gruntfile में कार्य को स्पष्ट रूप से लोड करने में मदद नहीं मिली है, तो आप 1.2.10 से पहले एनपीएम का संस्करण चला रहे हैं।

यह पता चला है कि ग्रंट-कर्म के हाल के संस्करण peer dependencies पर भरोसा करते हैं, जिन्हें संस्करण 8.1 9 के साथ नोड से पेश किया गया था। नोडज (जो एनपीएम भी स्थापित करता है) को अपग्रेड करने और विश्व स्तर पर कर्म को अपग्रेड करने के बाद, मैंने पाया कि मुझे अपनी कर्म कॉन्फ़िगरेशन फ़ाइलों को भी संपादित करने की आवश्यकता है। आप frameworks: ['jasmine'], से karma.conf.js जोड़ना और और JASMINE_ADAPTER पर files सेटिंग से संदर्भों को हटाना चाहते हैं।

+0

उत्तर के लिए धन्यवाद। यह मुझे दीवार के खिलाफ अपने सिर को टक्कर लगी, तुम्हारा जवाब दीवार के लिए दिन बचाया – mfeingold

1

ए को नहीं मिला समस्या की समस्या थी।

अंत में मुझे पता है यह पोर्ट के साथ एक समस्या थी (8080 पहले से ही इस्तेमाल किया गया था)

karma.config.js में पोर्ट संख्या बदलने के लिए:

// web server port 
port: 9999, 
संबंधित मुद्दे