2014-01-08 4 views
8

Я пытаюсь получить мои тесты единиц, работающие в Grunt, когда я выполняю свой индексный файл в браузере, тесты проходят успешно, однако, когда я запускаю тесты с grunt qunit, он не может распознать какие-либо тесты ,Тестирование модулей с помощью QUnit, Grunt и RequireJS

II уверен, что это вниз к тому, как я исполняющим тесты, если, например, я просто включить:

<script> 
test('Always Fail', function() { 
    equal(5, 2, 'The return should be 2.'); 
}); 
</script> 

В голове моей тестовой страницы index.html, а затем запустить Grunt я могу см. этот тест. Однако я пытаюсь загрузить мои тесты с помощью requireJS, которые, как я сказал, работают в браузере.

Мой файл index.html выглядит следующим образом:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Unit Testing</title> 
    <link rel="stylesheet" href="qunit/qunit.css"> 
    <script data-main="../unittests" src="../lib/require.js"></script> 
    <script src="qunit/qunit.js"></script> 
    <script> 
    test('Always Fail', function() { 
     equal(5, 2, 'The return should be 2.'); 
    }); 
    </script> 
</head> 
<body> 
    <div id="qunit"></div> 
    <div id="qunit-fixture"></div> 
</body> 
</html> 

Я предполагаю, что эта строка:

<script data-main="../unittests" src="../lib/require.js"></script> 

Это вызывает проблемы и не загружается с ворчанием.

Мой unittests.js файл выглядит следующим образом:

require.config({ 
    paths: { 
     'QUnit': 'test/qunit/qunit' 
    }, 
    shim: { 
    'QUnit': { 
     exports: 'QUnit', 
     init: function() { 
      QUnit.config.autoload = false; 
      QUnit.config.autostart = false; 
     } 
    } 
    } 
}); 

// require the unit tests. 
require(
    ['QUnit', 'test/dummyTest'], 
    function(QUnit, dummyTest) { 
     // run the tests. 
     dummyTest.run(); 
     // start QUnit. 
     QUnit.load(); 
     QUnit.start(); 
    } 
); 

Вот мой gruntfile:

module.exports = function(grunt) { 

    // use grunt 
    var nocompress, optimize; 

    nocompress = grunt.option('nocompress') || false; 

    if(nocompress) { 
    optimize = 'none'; 
    } else { 
    optimize = 'uglify'; 
    } 

    // Project configuration. 
    grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    requirejs: { 
     compile: { 
     options: { 
      appDir: "dev/", 
      baseUrl: "js", 
      mainConfigFile: "dev/js/bootstrap.js", 
      dir: "www", 
      optimize: optimize, 
      modules: [ 
      { 
       name: "app" 
      } 
      ] 
     } 
     } 
    }, 
    qunit: { 
     all: ['dev/js/test/**/*.html'] 
    }, 
    jshint: { 
     options: { 
     curly: true, 
     eqeqeq: true, 
     eqnull: true, 
     browser: true, 
     globals: { 
      jQuery: true 
     }, 
     }, 
     uses_defaults: [ 
     'dev/js/collections/*.js', 
     'dev/js/models/*.js', 
     'dev/js/views/*.js', 
     'dev/js/*.js', ] 
    } 
    }); 

    // Load plugins 
    grunt.loadNpmTasks('grunt-contrib-qunit'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-jshint'); 
    grunt.loadNpmTasks('grunt-contrib-requirejs'); 

    // Default task(s). 
    grunt.registerTask('build-and-qunit', ['default', 'qunit']); 
    grunt.registerTask('default', ['jshint', 'requirejs']); 

}; 
+1

Вы должны включить в вопрос соответствующие части вашего файла Gruntfile или, что еще лучше, целый файл Grunt, который содержит достаточно, чтобы воспроизвести проблему, которую вы получаете. – Louis

ответ

3

Я имел некоторый успех, используя структуру, подобную: https://github.com/jonnyreeves/qunit-require

  1. Отключить QUnit от автоматического запуска.
  2. Требовать все зависимости.
  3. Run QUitit.
+0

Спасибо, что сломали его до этих нескольких шагов, очень важно! –

Смежные вопросы