node.js模块中的Sinon Stub依赖类

问题描述 投票:0回答:1

我有一个以下课程


nx-user.js
class NXUser {
constructor() {}

view(guid, data) {
  //do something
}

}

然后,我具有下面的具有NxUser类依赖项的用户控制器模块

userController.js

const userDb = new NXUser();
import NXUser from "../../../persistence/nx-user";
const allUsers = () => {
    return userDb.view()
}

导出{allUsers}

我下面编写了用于对控制器单元测试的NxUser类的视图函数进行存根的代码。但是它不起作用。它总是将实际的一个称为已存根的一个]

userController-test.js

let userdb=NXUser();
describe("user controller", function () {
 let stubValue = [{
  "name": "Urvashi Parmar",
  "email": "[email protected]"]}

  it("Should create user", () => {           
            sinon.stub(userdb, 'create').resolves(stubValue);            
            userController.allUsers ().then((body) => {
                expect(body[0].name).to.equal(stubValue .name);
                done();
            });
        })  
}
node.js chai sinon
1个回答
0
投票

因为我还不能发表评论,所以我需要给出完整的答案。

困惑:在userController-test.js上,您正在尝试测试NXUser.create,而在文件nx-user.js上没有create的定义。

假设:您正在尝试测试NXUser.view。

此示例是根据您的代码创建的,并且工作正常。控制台日志“已调用”将不会被调用。

突出显示:

  1. 直接存根NXUser视图,而不是userdb.create;
  2. 我在测试中使用async-await。
const sinon = require('sinon');
const { expect } = require('chai');

class NXUser {
  constructor() {}
  view(guid, data) {
    console.log('Called');
    return new Promise((resolve) => resolve([]));
  }
  // Add this only for dummy.
  create() {
    return new Promise((resolve) => resolve([]));
  }
}

const userController = {
  allUsers() {
    const userDb = new NXUser();
    return userDb.view();
  }
}

describe('user controller', function () {
  // Suppose you test view user.
  it('should view user', async function () {
    const stubValue = [{
      name: 'Urvashi Parmar',
      email: '[email protected]'
    }];
    // Suppose you stub method view and not create.
    const stubUserDBView = sinon.stub(NXUser.prototype, 'view');
    stubUserDBView.resolves(stubValue);

    const body = await userController.allUsers();
    expect(body).to.be.an('array').that.have.lengthOf(1);
    expect(body[0]).to.have.property('name', stubValue[0].name);

    // Restore stub.
    stubUserDBView.restore();
  });
});
$ npx mocha stackoverflow.js


  user controller
    ✓ should view user


  1 passing (11ms)

$

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.