【问题标题】:Issues mocking node modules模拟节点模块的问题
【发布时间】:2015-03-31 05:13:10
【问题描述】:

我正在使用superagent 来支持 React 应用程序中的一些 XHR 服务。我围绕 superagent 编写了一个非常薄的包装器,以使配置更容易。事实证明,尝试测试这个薄层非常令人头疼。

我知道 issues 具有 jest 和节点核心依赖关系,我可以通过 dontMocking 超级代理的依赖关系来使事情正常工作。但我更喜欢开玩笑只是模拟 superagent 而不会默认炸毁。

结果是我的 package.json 中有一个非常冗长的测试介绍或 unMockedModulePatterns 条目,有没有更好的方法?

// my-module.js
'use strict';

var request = require('superagent');

module.exports = function () {
  return request.get('http://stackoverflow.com/questions/tagged/jestjs');
};

一个示例测试:

// __tests__/my-module-test.js
'use strict';

jest.dontMock('../');
// T_T
jest.dontMock('superagent');
jest.dontMock('debug');
jest.dontMock('tty');
jest.dontMock('util');
jest.dontMock('stream');
jest.dontMock('fs');
jest.dontMock('delayed-stream');
jest.dontMock('mime');
jest.dontMock('path');

describe('mymodule', function () {
  var myModule, request;

  beforeEach(function () {
    myModule = require('../');
    request = require('superagent');

    request.get = jest.genMockFunction(function () {
      return {
        get: jest.genMockFunction()
      }
    })
  });

  it('makes an xhr request using superagent', function() {
    var req = myModule();
    expect(request.get).toBeCalledWith('http://stackoverflow.com/questions/tagged/jestjs');
  });
});

【问题讨论】:

    标签: node.js jestjs


    【解决方案1】:

    我相信更好的方法是写manual mocks,像这样:

    __tests__/codeundertest.js:

    jest.dontMock('../codeundertest');
    describe('whatever', function() {
      it('should do the do', function() {
        var request = require('superagent');
    
        require('../codeundertest')();
        expect(request.get.mock.calls[0][0]).toBe('http://stackoverflow.com/questions/tagged/jestjs');
      });
    });
    

    __mocks__/superagent.js:

    module.exports = {
      get: jest.genMockFunction()
    };
    

    codeundertest.js:

    var request = require('superagent');
    module.exports = function () {
      return request.get('http://stackoverflow.com/questions/tagged/jestjs');
    };
    

    jest 的自动模拟在工作时非常好,但在许多情况下,编写自己的模拟比尝试支持它的自动模拟更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2020-10-18
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多