3

我正在尝试m.request在无 DOM 环境中对秘银模型进行单元测试。

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

我正在考虑模拟 XMLHttpRequest 的响应以获得正确的初始化m.request,但我不确定从哪里开始。我有一个从测试中删除的 XMLHttpRequest 的幼稚实现,并研究了m.request.

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;
    });
  }
};
4

1 回答 1

3

你可以参考 Mithril自己的测试套件,看看它是如何测试m.request自己的

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

于 2014-10-15T16:35:43.113 回答