2

In an attempt to level up my general coding skills... and to learn something new. I've started attempting to wire up a front end only solution consisting of

  1. Durandal
  2. Jasmine - [added via npm]
  3. Grunt Watch to monitor & run my tests as my code files change - [added via npm]

Feel free to correct me, as this is all based on my experimentation in the last 2 days. Most of this is new to me. My goal is to have something similar as to what angular has with karma.

Now I am aware that that the Durandal project (comes with a custom spec runner, as found in the github solution)

My setup:

gruntfile.js

    module.exports = function(grunt) {
    var appPath = 'App/viewmodels/*.js';
    var testPath = 'Tests/**/*.js';
    grunt.initConfig({
        jasmine:    {
            pivotal: {
                src: appPath,
                options: {
                    specs: testPath,
                    template: require('grunt-template-jasmine-requirejs'),
                    templateOptions: {
                      requireConfigFile: 'SpecRunner.js'
                    }
                }
            }
        },
        jshint: {
            all: [testPath, appPath],
            options: {
                curly: true
            }
        },
        watch: {
            files: [testPath, appPath], 
            tasks: ['jshint','jasmine']
        }   
    });

    grunt.loadNpmTasks('grunt-contrib-jasmine');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');

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

SpecRunner.js

require.config({
  paths: {
    jquery: 'Scripts/jquery-1.9.1',
    knockout: 'Scripts/knockout-2.3.0'
  },
  shim: {
    knockout: {
      exports: "ko"
    }
  }
});

When I run grunt, I get a Illegal path or script error: ['plugins/http'] (I've sorted out the ko issue in the screenshot) enter image description here

Question:

How would i go about setting up my gruntfile to require any dependencies. I'm quite new to require, and I'm not sure how to configure it to make my tests aware of where to find things like 3rd party libraries and other custom js files for that matter

4

1 回答 1

2

SpecRunner require.config is missing Durandal specific path information. If you set the baseUrl to 'App' then the paths below matches the HTML samples or StarterKit layout. If your layout is different you'd have to adjust this accordingly.

requirejs.config({
    paths: {
        'text': '../lib/require/text',
        'durandal':'../lib/durandal/js',
        'plugins' : '../lib/durandal/js/plugins',
        'transitions' : '../lib/durandal/js/transitions',
        'knockout': '../lib/knockout/knockout-2.3.0',
        'bootstrap': '../lib/bootstrap/js/bootstrap',
        'jquery': '../lib/jquery/jquery-1.9.1'
    }
});
于 2013-10-10T10:01:25.043 回答