Mongoose 需要一个将mockingoose与静态或方法结合使用的示例吗

Mongoose 需要一个将mockingoose与静态或方法结合使用的示例吗,mongoose,mocking,mockingoose,Mongoose,Mocking,Mockingoose,试图用mockingoose模拟静态mongoose函数(getloginda),但运气不佳 有人给我举了一个有效的例子吗?以下是我得到的: 我的用户模型 //models/user.js ... UserSchema.methods.login = function (username, password, host) { Game.setHost(host); this.setUserData(username, password); return this.constru

试图用mockingoose模拟静态mongoose函数(getloginda),但运气不佳

有人给我举了一个有效的例子吗?以下是我得到的:

我的用户模型 //models/user.js

...

UserSchema.methods.login = function (username, password, host) {
  Game.setHost(host);

  this.setUserData(username, password);

  return this.constructor.getLoginData().then(loginPageData => {
    const loginData = Object.assign({}, defaultLoginData, {
      name: this.username,
      password: this.password,
      login: loginPageData.loginInput
    });

    return this.constructor.loginWithUserData(loginData);
  }).catch(error => console.log(error))
};


UserSchema.statics.getLoginData = function () {
  const options = {
    url: Game.getUrl(config.LOGIN),
  };

  return request(options, pages.getLoginPageData);
};
我的单元测试 //测试/user.js

...

describe('User', () => {
  describe('login', function () {
    it('username and password should set as virtual', () => {
      const user = new User({});

      mockingoose.User.toReturn( 
        Promise.resolve(responseMocks.loginPage), 'getLoginData'
      );
      mockingoose.User.toReturn(
        expectedLoginData, 
        'loginWithUserData'
      );

      user.login('foo', 'bar').then(loginData => {
        expect(user.username).to.equal(expectedLoginData.name);
      });
    })
  });
});

好的,解决方法很简单。我只是直接模拟模型的静力学:

...

describe('User', () => {
  describe('login', function () {
    it('username and password should set as virtual', () => {

      User.getLoginData = jest.fn(() => 
      Promise.resolve(responseMocks.loginPage));
      User.loginWithUserData = jest.fn(() => expectedLoginData);

      const user = new User({});

      user.login('foo', 'bar').then(loginData => {
        expect(user.username).to.equal(expectedLoginData.name);
      });
    })
  });
});