2014-01-18 108 views
1

我剛下載並安裝了應用套件。我已經開始運行了,並且正在使用express來跟蹤included directions以僞造後端。使用快遞與Karma測試應用套件應用程序

我也安裝了Karma,並試圖與express後端一起運行測試。我不相信快速應用程序正在啓動,但因爲當我查看Karma的輸出時,我發現它試圖執行GET請求並失敗。

Failed to load resource: the server responded with a status of 404 (Not Found) http://1.10.1.10:9876/api/posts/1 

雖然我打開開發端口(8000)時返回Json。

我如何告訴Karma啓動9876端口上的快速應用程序來測試?

我使用karma.conf.js從ember-app-kit-todos repo

這是我Gruntfile.js。我也從todos回購:

module.exports = function(grunt) { 
    // To support Coffeescript, SASS, LESS and others, just install 
    // the appropriate grunt package and it will be automatically included 
    // in the build process: 
    // 
    // * for Coffeescript, run `npm install --save-dev grunt-contrib-coffee` 
    // 
    // * for SCSS (without SASS), run `npm install --save-dev grunt-sass` 
    // * for SCSS/SASS support (may be slower), run 
    // `npm install --save-dev grunt-contrib-sass` 
    // This depends on the ruby sass gem, which can be installed with 
    // `gem install sass` 
    // * for Compass, run `npm install --save-dev grunt-contrib-compass` 
    // This depends on the ruby compass gem, which can be installed with 
    // `gem install compass` 
    // You should not install SASS if you have installed Compass. 
    // 
    // * for LESS, run `npm install --save-dev grunt-contrib-less` 
    // 
    // * for Stylus/Nib, `npm install --save-dev grunt-contrib-stylus` 
    // 
    // * for Emblem, run the following commands: 
    // `npm uninstall --save-dev grunt-ember-templates` 
    // `npm install --save-dev grunt-emblem` 
    // `bower install emblem.js --save` 
    // 
    // * For EmberScript, run `npm install --save-dev grunt-ember-script` 
    // 
    // * for LiveReload, `npm install --save-dev connect-livereload` 
    // 
    // * for displaying the execution time of the grunt tasks, 
    // `npm install --save-dev time-grunt` 
    // 
    // * for minimizing the index.html at the end of the dist task 
    // `npm install --save-dev grunt-contrib-htmlmin` 
    // 
    // * for minimizing images in the dist task 
    // `npm install --save-dev grunt-contrib-imagemin` 
    // 
    // * for using images based CSS sprites (http://youtu.be/xD8DW6IQ6r0) 
    // `npm install --save-dev grunt-fancy-sprites` 
    // `bower install --save fancy-sprites-scss` 
    // 
    // * for automatically adding CSS vendor prefixes (autoprefixer) 
    // `npm install --save-dev grunt-autoprefixer` 
    // 

    var Helpers = require('./tasks/helpers'), 
     filterAvailable = Helpers.filterAvailableTasks, 
     _ = grunt.util._, 
     path = require('path'); 

    Helpers.pkg = require("./package.json"); 

    if (Helpers.isPackageAvailable("time-grunt")) { 
    require("time-grunt")(grunt); 
    } 

    // Loads task options from `tasks/options/` and `tasks/custom-options` 
    // and loads tasks defined in `package.json` 
    var config = _.extend({}, 
    require('load-grunt-config')(grunt, { 
     configPath: path.join(__dirname, 'tasks/options'), 
     loadGruntTasks: false, 
     init: false 
     }), 
    require('load-grunt-config')(grunt, { // Custom options have precedence 
     configPath: path.join(__dirname, 'tasks/custom-options'), 
     init: false 
     }) 
); 

    grunt.loadTasks('tasks'); // Loads tasks in `tasks/` folder 

    config.env = process.env; 




    // App Kit's Main Tasks 
    // ==================== 


    // Generate the production version 
    // ------------------ 
    grunt.registerTask('dist', "Build a minified & production-ready version of your app.", [ 
        'clean:dist', 
        'build:dist', 
        'copy:assemble', 
        'createDistVersion' 
        ]); 


    // Default Task 
    // ------------------ 
    grunt.registerTask('default', "Build (in debug mode) & test your application.", ['test']); 


    // Servers 
    // ------------------- 
    grunt.registerTask('server', "Run your server in development mode, auto-rebuilding when files change.", function(proxyMethod) { 
    var expressServerTask = 'expressServer:debug'; 
    if (proxyMethod) { 
     expressServerTask += ':' + proxyMethod; 
    } 

    grunt.task.run(['clean:debug', 
        'build:debug', 
        expressServerTask, 
        'watch' 
        ]); 
    }); 

    grunt.registerTask('server:dist', "Build and preview a minified & production-ready version of your app.", [ 
        'dist', 
        'expressServer:dist:keepalive' 
        ]); 


    // Testing 
    // ------- 
    grunt.registerTask('test', "Run your apps's tests once. Uses Google Chrome by default.", [ 
        'clean:debug', 'build:debug', 'karma:test' ]); 

    grunt.registerTask('test:ci', "Run your app's tests in PhantomJS. For use in continuous integration (i.e. Travis CI).", [ 
        'clean:debug', 'build:debug', 'karma:ci' ]); 

    grunt.registerTask('test:browsers', "Run your app's tests in multiple browsers (see tasks/options/testem.js for configuration).", [ 
        'clean:debug', 'build:debug', 'karma:browsers' ]); 

    grunt.registerTask('test:server', "Start a Karma test server and the standard development server.", function(proxyMethod) { 
    var expressServerTask = 'expressServer:debug'; 
    if (proxyMethod) { 
     expressServerTask += ':' + proxyMethod; 
    } 

    grunt.task.run(['clean:debug', 
        'build:debug', 
        'karma:server', 
        expressServerTask, 
        'addKarmaToWatchTask', 
        'watch' 
        ]); 
    }); 

    // Worker tasks 
    // ================================= 

    grunt.registerTask('build:dist', filterAvailable([ 
        'createResultDirectory', // Create directoy beforehand, fixes race condition 
        'fancySprites:create', 
        'concurrent:buildDist', // Executed in parallel, see config below 
        ])); 

    grunt.registerTask('build:debug', filterAvailable([ 
        'jshint:tooling', 
        'createResultDirectory', // Create directoy beforehand, fixes race condition 
        'fancySprites:create', 
        'concurrent:buildDebug', // Executed in parallel, see config below 
        ])); 

    grunt.registerTask('createDistVersion', filterAvailable([ 
        'useminPrepare', // Configures concat, cssmin and uglify 
        'concat', // Combines css and javascript files 

        'cssmin', // Minifies css 
        'uglify', // Minifies javascript 
        'imagemin', // Optimizes image compression 
        // 'svgmin', 
        'copy:dist', // Copies files not covered by concat and imagemin 

        'rev', // Appends 8 char hash value to filenames 
        'usemin', // Replaces file references 
        'htmlmin:dist' // Removes comments and whitespace 
        ])); 

    // Parallelize most of the build process 
    _.merge(config, { 
    concurrent: { 
     buildDist: [ 
     "buildTemplates:dist", 
     "buildScripts", 
     "buildStyles", 
     "buildIndexHTML:dist" 
     ], 
     buildDebug: [ 
     "buildTemplates:debug", 
     "buildScripts", 
     "buildStyles", 
     "buildIndexHTML:debug" 
     ] 
    } 
    }); 

    // Templates 
    grunt.registerTask('buildTemplates:dist', filterAvailable([ 
        'emblem:compile', 
        'emberTemplates:dist' 
        ])); 

    grunt.registerTask('buildTemplates:debug', filterAvailable([ 
        'emblem:compile', 
        'emberTemplates:debug' 
        ])); 

    // Scripts 
    grunt.registerTask('buildScripts', filterAvailable([ 
        'jshint:app', 
        'jshint:tests', 
        'coffee', 
        'emberscript', 
        'copy:javascriptToTmp', 
        'transpile', 
        'concat_sourcemap' 
        ])); 

    // Styles 
    grunt.registerTask('buildStyles', filterAvailable([ 
        'compass:compile', 
        'sass:compile', 
        'less:compile', 
        'stylus:compile', 
        'copy:cssToResult', 
        'autoprefixer:app' 
        ])); 

    // Index HTML 
    grunt.registerTask('buildIndexHTML:dist', [ 
        'preprocess:indexHTMLDistApp', 
        'preprocess:indexHTMLDistTests' 
        ]); 

    grunt.registerTask('buildIndexHTML:debug', [ 
        'preprocess:indexHTMLDebugApp', 
        'preprocess:indexHTMLDebugTests' 
        ]); 

    // Appends `karma:server:run` to every watch target's tasks array 
    grunt.registerTask('addKarmaToWatchTask', function() { 
    _.forIn(grunt.config('watch'), function(config, key) { 
     if (key === 'options') { return; } 
     config.tasks.push('karma:server:run'); 
     grunt.config('watch.' + key, config); 
    }); 
    }); 

    grunt.registerTask('createResultDirectory', function() { 
    grunt.file.mkdir('tmp/result'); 
    }); 

    grunt.initConfig(config); 
}; 

我對EAK和Karma很新。任何幫助將非常感激。

回答

1

您可以在package.json文件中配置proxyURL的位置,如here所示。您還需要確保APIMethod設置爲'proxy' instead of 'stub'

要在8000以外的端口上實際啓動服務器,您需要在運行測試時設置environment variable。所以,如果你像這樣調用grunt:PORT=9876 grunt test它應該在你指定的端口上啓動服務器。