如何在秘银中使用m.request对模型进行单元测试?

时间:2014-10-15 02:55:11

标签: javascript ajax unit-testing mithril.js

我正在尝试在无DOM的环境中使用m.request对Mithril模型进行单元测试。

我使用浏览器的XMLHttpRequest将此测试用作浏览器环境中的集成测试,但希望选项能够单独运行它。

我正在考虑嘲笑XMLHttpRequest的响应,以便正确初始化m.request,但我不知道从哪里开始。我有一个从测试驱逐出来的XMLHttpRequest的天真实现,并且已经查看了m.request的来源,但作为一个相对的JS新手,它很难遵循。

m.request完全用于测试转换是否更有意义,因为我相信Mithril有效(并且在技术上是被测单元的依赖)?这让我感到有些害怕,因为m.request具有链接行为,这可能是难以存根的。

我很乐意接受一个答案,该答案通常描述了我需要采取的步骤,以便在此方面取得一些进展,和/或对测试有意义的一些建议。

require('chai').should();
require('mithril');

m.deps({ XMLHttpRequest: function() {
  this.open = function() {
  }

  this.setRequestHeader = function() {
  }

  this.send = function() {
  }
}});

var Curriculum = require('../../../app/modules/practice/practice.curriculum');

describe('Curriculum', function() {
  it('can retrieve a list of modules', function(done) {
    Curriculum.modules().then(function(modules) {
      modules.should.deep.equal([
        { name: 'Module 1' },
        { name: 'Module 2' },
        { name: 'Module 3' }
      ]);
      done();
    });
  });
});

目前,使用mocha运行此测试时无益,没有输出或错误。

被测单位的来源,如果有帮助:

module.exports = {
  modules: function() {
    // URL obscured to protect the innocent.
    return m.request({
      method: 'GET',
      url: 'http://working.url'
    }).then(function(objects) {
      var transformed = objects.map(function(object) {
        return { name: object.name };
      });
      return transformed;
    });
  }
};

1 个答案:

答案 0 :(得分:3)

您可以参考Mithril的own test suite来了解它如何测试m.request本身

可以找到这些测试中使用的模拟对象here