如何测试 expressJS 控制器-NodeJS

试图对我的控制器进行单元测试,但是当我这样做时,我收到以下错误。


我愿意用不同的方式来测试我的控制器。


错误:


类型错误:预期的 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);

      })

    );

  });


蛊毒传说
浏览 114回答 1
1回答

凤凰求蛊

首先,在询问 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 这里的错误当然不是真正的错误,而只是我没有完整实现控制器和车辆类的副产品。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript