为了账号安全,请及时绑定邮箱和手机立即绑定

如何测试 expressJS 控制器-NodeJS

如何测试 expressJS 控制器-NodeJS

蛊毒传说 2021-10-29 15:09:45
试图对我的控制器进行单元测试,但是当我这样做时,我收到以下错误。我愿意用不同的方式来测试我的控制器。错误:类型错误:预期的 sinon 对象 const test = require('sinon-test'); describe('index (get all)', function() {    beforeEach(function() {      res = {        json: sinon.spy(),        status: sinon.stub().returns({ end: sinon.spy() })      };      expectedResult = [{}, {}, {}];    });    it(      'should return array of vehicles or empty array',      test(() => {        this.stub(Vehicle, 'find').yields(null, expectedResult);        Controller.index(req, res);        sinon.assert.calledWith(Vehicle.find, {});        sinon.assert.calledWith(res.json, sinon.match.array);      })    );  });
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

首先,在询问 StackOverflow 问题时,发布一个完全可运行的示例并说明所有依赖项是有意义的。基本上,我用了一个多小时试图测试这一点,因为两者都丢失了。


这是完全扩展的示例,仅包含两个主要对象的虚拟实现。


var sinon = require("sinon");

var sinonTest = require("sinon-test");

var test = sinonTest(sinon);


const Vehicle = {

  find() {}

};

const Controller = {

  index() {}

};


describe("index (get all)", function() {

  let expectedResult, res, req;


  beforeEach(function() {

    res = {

      json: sinon.spy(),

      status: sinon.stub().returns({ end: sinon.spy() })

    };

    expectedResult = [{}, {}, {}];

  });


  it(

    "should return array of vehicles or empty array",

    test(function() {

      this.stub(Vehicle, "find").yields(null, expectedResult);

      Controller.index(req, res);

      sinon.assert.calledWith(Vehicle.find, {});

      sinon.assert.calledWith(res.json, sinon.match.array);

    })

  );

});

现在,对于您的问题,这就是您收到错误的原因。首先要测试的是:当我更新到最新版本的测试依赖项时,会不会出现这个bug?答案是,不,它不会出现。所以基本上,这是关于你使用sinon-test2.0 版,它与 Sinon 3 有一个兼容性错误。这是来自更新日志:


2.1.0 / 2017-08-07

==================

Fix compatibility with Sinon 3 (#77)



2.0.0 / 2017-06-22

==================


  * Simplify configuration API (#74)

因此,鉴于已修复,并且正在使用下面的示例,测试完全可以运行:


mocha mytest.js 



  index (get all)

    1) should return array of vehicles or empty array



  0 passing (6ms)

  1 failing


  1) index (get all)

       should return array of vehicles or empty array:

     AssertError: expected find to be called with arguments 

这里的错误当然不是真正的错误,而只是我没有完整实现控制器和车辆类的副产品。


查看完整回答
反对 回复 2021-10-29
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信