【问题标题】:Making grunt-mocha works with requirejs使用 requirejs 制作 grunt-mocha
【发布时间】:2013-12-01 15:31:10
【问题描述】:

在浏览器中运行以下 Mocha 测试有效,但是当我在命令行中使用 grunt mocha 时,我得到 Warning: PhantomJS timed out。我已将 gruntfile mocha.options.run 设置为 false,因为如果为 true,则 requirejs 没有时间运行。

很遗憾,我找不到任何关于此事的完整样本。

gruntfile 包含:

mocha: {
  test: {
    src: ['tests/index.html']
  },
}

index.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Mocha Test</title>
    <link rel="stylesheet" href="../node_modules/mocha/mocha.css" type="text/css" charset="utf-8" />
</head>
<body>
    <div id="mocha"></div>

    <script src="../node_modules/mocha/mocha.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">
        mocha.setup('bdd');
    </script>

    <script src="../node_modules/chai/chai.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">
        var expect = chai.expect;
    </script>

    <script data-main="requireRunner.js" src="../vendor/require-2.1.9.js"></script>
</body>
</html>

requireRunner:

require.config({
  baseUrl: '/',
  paths: {
    'jquery'        : '../vendor/jquery-2.0.3',
    'underscore'    : '../vendor/underscore-1.5.2',
    'backbone'      : '../vendor/backbone-1.1.0'
  },
  shim: {
    underscore: {
      exports: '_'
    },
    backbone: {
      deps: [
        'underscore',
        'jquery'
      ],
      exports: 'Backbone'
    }
  },
  urlArgs: 'bust=' + (new Date()).getTime()
});

require([
  'tests/models/todoTest'
  ], mocha.run
);

待办事项

define(['js/models/todo'], function(Todo) {
    describe('Todo', function(){    

        var todo;
        before(function() {
            todo = new Todo();
        })

        it('defaults are ok', function(){
            expect(todo.get('title')).to.equal('');
            expect(todo.get('completed')).to.be.false;
        })
    })
})

待办事项

/*global define*/
define([
    'underscore',
    'backbone'
], function (_, Backbone) {
    'use strict';

    var TodoModel = Backbone.Model.extend({
        // Default attributes for the todo
        // and ensure that each todo created has `title` and `completed` keys.
        defaults: {
            title: '',
            completed: false
        }
    });

    return TodoModel;
});

【问题讨论】:

  • 我在尝试使用 requirejs 运行 mocha 时也遇到了困难,测试可以在浏览器中运行,但不能在没有执行的命令行中运行,真的很奇怪。
  • 拜托,看看我自己的答案,我在 mocha runner 中使用了 log:true 并且需要调试跟踪。

标签: requirejs gruntjs mocha.js


【解决方案1】:

多个小事让它正常工作:

  • 路径在浏览器上似乎更宽容,路径问题只能在 grunt-mocha 上出现(这不是问题,只是提醒)
  • 运行grunt mocha 是不够的,grunt server mocha 是方式,服务器必须启动
  • 在 index.html 中使用 options:{log: true}requirejs debugging traces 是很好的帮助

【讨论】:

    【解决方案2】:

    您的帖子帮助我设置了 grunt-mocha 任务!谢谢

    我把 mocha.options.run 弄错了,否则 grunt-mocha 没有处理任何测试(猜你说 requirejs 没有时间加载)

    但是我不必设置任何服务器即可使其正常工作。 运行grunt mocha 就足够了!

    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>FdP - Tests</title>
        <link rel="stylesheet" href="../app/vendor/mocha/mocha.css"/>
    </head>
    <body>
    <div id="mocha"></div>
    <script src="../app/vendor/mocha/mocha.js"></script>
    <script src="../app/vendor/chai/chai.js"></script>
    <script>
        mocha.setup('bdd');
        chai.should();
    </script>
    <script data-main="specRunner.js" src="../app/vendor/requirejs/require.js"></script>
    </body>
    </html>
    

    我的摩卡任务

    mocha: {
      test: {
        src: ['test/index.html']
      }
    }
    

    specRunner.js

    ...
    function (testSuite) {
        'use strict';
        require(testSuite.specs, function () {
            mocha.run();
        });
    ...
    

    咕噜摩卡版:0.4.7

    【讨论】:

    • 是的:您不需要服务器,您的测试文件只需可用。就我而言,出于 xhr 的原因,我通过 node / connect / grunt 服务器为它们提供服务,仅此而已:D
    【解决方案3】:

    我认为您的测试 html 文件中可能有一些文件包含错误。你可以去你的html文件所在的文件夹,双击文件,如果测试用例在浏览器中可以正常运行,那么grunt-mocha也可以运行。所以,也许问题是找不到 require.js 之类的东西。

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      相关资源
      最近更新 更多