【问题标题】:How do I add methods to nodejs supertest module?如何向 nodejs supertest 模块添加方法?
【发布时间】:2015-12-08 09:56:55
【问题描述】:

我正在尝试向https://github.com/visionmedia/supertest 添加一些方便的方法。到目前为止,我能够做到的唯一方法是将它们直接添加到 lib/test.js 中的模块源代码中:

Test.prototype.expectHeaders = function (a)
{
  for (var header in a)
  {
    this._asserts.push(this._assertHeader.bind(this,
    {
      name: '' + header,
      value: a[header]
    }));
  }

  return this;
};

我通过 util.inherits 和prototype.__proto__ 进行了尝试,但每次尝试都以“expectHeaders is not a function”异常结束。

这是我最近的尝试:

var supertest = require('supertest'),
  util = require('util');

var SccTest = function()
{
};

SccTest.prototype.__proto__ = supertest.prototype;

SccTest.expectHeaders = function (a)
{
  for (var header in a)
  {
    this._asserts.push(this._assertHeader.bind(this,
    {
      name: '' + header,
      value: a[header]
    }));
  }

  return this;
};

util.inherits(SccTest, supertest);
module.exports = SccTest;

如何正确地将方法添加到测试原型?

【问题讨论】:

    标签: javascript node.js supertest


    【解决方案1】:

    如果你想从 supertest 对象继承,你不需要手动将你的原型指向 supertest。你可以调用 util.inherites 方法:

    var supertest = require('supertest'),
        util = require('util');
    
    var SccTest = function(){
    };
    util.inherits(SccTest, supertest);
    
    SccTest.prototype.expectHeaders = function (a){
      ...
    };
    module.exports = SccTest;
    

    【讨论】:

    • 不起作用。我做了 scctest = require('./scctest'); scctest('google.com').get('/'); throws Cannot read property 'get' of undefined
    【解决方案2】:

    好的,这段代码应该很有帮助。

       var supertest = require('supertest'),
          util = require('util');
        var SccTest=function (arguments) {
          var sccTest = {}
          sccTest.__proto__ = supertest(arguments)
          sccTest.expectHeaders = function (a)
          {
            for (var header in a)
            {
              this._asserts.push(this._assertHeader.bind(this,
              {
                name: '' + header,
                value: a[header]
              }));
            }
            return this;
          };
          return sccTest;
        }
    

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 2012-06-01
      • 2014-11-08
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多