首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone.Deferred.Model:为什么单元测试不运行?

Backbone.Deferred.Model:为什么单元测试不运行?
EN

Stack Overflow用户
提问于 2015-06-12 01:05:31
回答 1查看 54关注 0票数 1

这是有问题的代码。

代码语言:javascript
复制
define (require) ->

  Backbone = require 'backbone'

  require 'backbone-deferred'

  class Data extends Backbone.Deferred.Model

    urlRoot: 'data'

    parse: (resp) ->
      resp.record or resp

    isValid: ->
      @get 'valid'

    # Newly introduced
    dataUrl: ->
      @get('data_url')?.replace /abc/, ''

这是单元测试

代码语言:javascript
复制
define (require) ->

  Data         = require 'model/Data'

  describe 'dataurl', ->

    describe 'No change', ->
      data = new Data id: '123', name: 'Dummy', data_url: 'https://m/a.png'
      expect(data.dataUrl()).to.equal('https://m/a.png')

由于某种原因,测试不是由摩卡运行的。

我使用这个html来驱动测试。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Mocha Tests</title>
  <link rel="stylesheet" href="../bower_components/mocha/mocha.css" type="text/css" media="screen" title="Tests for {%= name %}" charset="utf-8">
</head>
<body>
  <div id="mocha"></div>
  <script src="../bower_components/mocha/mocha.js" type="text/javascript" charset="utf-8"></script>
  <script src="../bower_components/chai/chai.js" type="text/javascript" charset="utf-8"></script>

  <script src="../bower_components/requirejs/require.js" type="text/javascript" charset="utf-8"></script>
  <!-- Requirejs configuration -->
  <script src="../temp/local/scripts/config.js" type="text/javascript" charset="utf-8"></script>

  <script type="text/javascript" charset="utf-8">
    // Dumping console messages to /dev/null to avoid parsing error
    // when grunt:mocha_phantomjs is run
    if (navigator.userAgent.indexOf('PhantomJS') >= 0) {
      var log = console.log
      console.log = function(message) {
        if (message.indexOf('<') === 0) {
          log.apply(this, Array.prototype.slice.call(arguments))
        }
      }
    }

    // Mixpanel is not loaded for unit testing.
    // Redirecting mixpanel to /dev/null.
    window.mixpanel = {
      track: function() {}
    };

    require.config({
      baseUrl: "../temp/local/scripts",
      shim: {
        'chai-jquery': {
          deps: ['jquery']
        },
        'sinon': {
          exports: 'sinon'
        }
      },
      paths: {
        // Aliasing path to find the specs
        'specs': '../../specs',

        'sinon'      : '../../../bower_components/sinon/lib/sinon',
        'sinon-chai' : '../../../bower_components/sinon-chai/lib/sinon-chai',
        'chai-jquery': '../../../bower_components/chai-jquery/chai-jquery',
        'handlebars' : '../../../bower_components/handlebars/handlebars',

      }
    });

    runTests = function() {

      // Ensuring that jquery and chai-jquery are loaded
      require(
          ['jquery', 'chai-jquery', 'sinon-chai', 'handlebars'],
          function($, jqueryChai, sinonChai, Handlebars) {
        // Registering testing style in globals for easy access
        window.expect = chai.expect;
        chai.use(jqueryChai);
        chai.use(sinonChai)

        mocha.setup({
          ui: 'bdd',
          ignoreLeaks: true
        });

        // Protect from barfs
        console = window.console || function() {};

        // Don't track
        window.notrack = true;

        // Helper... not really needed but in case we want to do something fancy
        var runMocha = function() {
          mocha.run();
        };

        require([
          // Many other tests; removed for clarity
          'specs/data.spec'
        ], function() {
          // For xUnit and code coverage reports, we run the tests
          // using mocha-phantomjs runner.
          if (window.mochaPhantomJS) {
            mochaPhantomJS.run();
          }
          else {
            mocha.run();
          }
        });
      });

    }

  </script>
</body>
</html>

下面是咕噜测试任务的输出

代码语言:javascript
复制
Running "mocha:default" (mocha) task
Testing: test/index.html


  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
  ․․․․․․․․․․․

  1081 passing (9s)

>> 1081 passed! (9.17s)

我的问题是:

1)添加新的测试后,测试的次数发生了根本变化。新测试没有被接受的可能原因是什么?

2)如果我有意在单元测试中引入一个错误,那么在测试失败的情况下,它会导致这个错误:

代码语言:javascript
复制
Warning: PhantomJS timed out, possibly due to a missing Mocha run() call. Use --force to continue. 

我确信这与测试有关,但没有足够的信息来诊断这个问题。如何打开日志记录或获取其他信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 13:30:42

您的测试用例应该使用it函数而不是describe (用于分组测试)来定义。

代码语言:javascript
复制
define (require) ->    
  Data = require 'model/Data'    
  describe 'dataurl', ->    
    it 'No change', ->
      data = new Data id: '123', name: 'Dummy', data_url: 'https://m/a.png'
      expect(data.dataUrl()).to.equal('https://m/a.png')

我已经创建了这支小提琴,所以您可以看到与原始定义的区别。

如果在测试中引入错误,如果在it函数中没有定义测试,那么它将影响整个测试运行。您可以在这个其他小提琴中检查它(您将注意到在错误定义的测试中错误之后没有运行第二个测试)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30793826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档