1

我们正在编写一个基于 Backbone.js 的应用程序,并尝试将我们的 Mocha 测试与我们的 Jenkins 持续集成服务器一起使用。

到目前为止,我可以使用Testemmocha-phantomjs 之类的东西运行测试。测试运行,但它们从不触发退出代码,因此脚本永远不会返回到命令行提示符。这正是脚本应该做的,所以我猜测我们设置 Mocha 测试库的方式有问题。我自己没有发现问题。

有没有其他人遇到过这个问题,至少找到了解决方法。

有任何想法吗?

我们的 test.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Dashboard Mocha Tests</title>
  <link rel="stylesheet" href="css/mocha.css" />

  <script src="js/vendor/require.js" type="text/javascript"></script>
  <script>
    requirejs.config({
      baseUrl: 'js/',
      paths: {
        jquery        : 'vendor/jquery.min',
        underscore    : 'vendor/underscore',
        backbone      : 'vendor/backbone',
        handlebars    : 'vendor/handlebars',
        text          : 'vendor/require-text',
        json          : 'vendor/require-json',
        chaplin       : 'vendor/chaplin',
        mocha         : 'vendor/mocha',
        chai          : 'vendor/chai',
        sinon         : 'vendor/sinon',
        moment        : 'vendor/moment'
      },
      shim: {
        backbone: {
          deps        : ['underscore', 'jquery'],
          exports     : 'Backbone'
        },
        underscore: {
          exports     : '_'
        }
      }
    });

  if (location.hash === '#testem')
    document.write('<script src="/testem.js"></'+'script>')
</script>
</head>
<body>
  <div id="mocha"></div>
  <script type="text/javascript">
    require(['require', 'vendor/chai', 'vendor/mocha', 'vendor/sinon'], function(require, chai) {

      assert = chai.assert;
      expect = chai.expect;
      should = chai.should();

      mocha.setup({
        ui: 'bdd',
      });
      var specs = [
        'test/lib/utils',
        'test/models/campaigns',
        'test/models/campaign',
        'test/views/input/input',
        'test/views/input/text',
        'test/views/input/textarea',
        'test/views/input/checkbox',
        'test/views/input/email',
        'test/views/input/password',
        'test/views/input/button',
        'test/views/input/submit_button',
        'test/views/input/reset_button',
        'test/views/input/number',
        'test/views/input/date_time',
        'test/views/input/date'
      ];
      require(specs, function() {
         mocha.run()
      })
    })
  </script>

</body>
</html>

这是我们的一个测试外观的示例。

(function() {

  define(['views/forms/textarea'], function(Textarea) {
    'use strict';
    return describe('Textarea', function() {
      var field;
      field = new Textarea;
      describe('defaults', function() {
        it('is enabled by default', function() {
          return assert.isTrue(field.isEnabled());
        });
        return it('contains one textarea field', function() {
          return assert.lengthOf($(field.el).find('textarea'), 1);
        });
      });
      return describe('value', function() {
        return it('can have set and get a value', function() {
          field.setValue('my super value');
          return assert.equal('my super value', field.getValue());
        });
      });
    });
  });

}).call(this);

任何帮助将非常感激。提前致谢。

4

1 回答 1

0

你试过在ci模式下运行 testem 吗?我这样运行它:

% testem ci --launch PhantomJS

只要确保phantomjs可执行文件在您的路径中并且一切正常。

于 2012-11-27T20:51:02.253 回答