【问题标题】:Sinon Stub depedent class in node.js modulenode.js 模块中的 Sinon Stub 依赖类
【发布时间】:2020-05-29 11:41:07
【问题描述】:

我有一门课如下


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 类的存根视图函数编写了以下代码。但它不起作用。它总是调用实际的一个 instated 一个 stubbed

userController-test.js

let userdb=NXUser();
describe("user controller", function () {
 let stubValue = [{
  "name": "Urvashi Parmar",
  "email": "urvashi.parmar@nationalexpress.com"]}

  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】:

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

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

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

    此示例是根据您的代码创建的,并且运行良好。控制台日志“Called”不会被调用。

    重点:

    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: 'urvashi.parmar@nationalexpress.com'
        }];
        // 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)
    
    $
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-28
      • 2018-04-19
      • 1970-01-01
      • 2019-02-11
      • 2016-07-20
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多