MeteorJS:如何在单元测试中存根验证方法

时间:2017-09-28 23:11:07

标签: javascript unit-testing meteor stub

我正在使用经过验证的方法(mdg:validated-method)和LoggedInMixin(tunifight:loggedin-mixin)。

现在我的单元测试有问题,因为它们因notLogged错误而失败,因为在单元测试中当然没有记录用户。 我该怎么做那个?

方式

const resetEdit = new ValidatedMethod({
  name: 'reset',
  mixins: [LoggedInMixin],
  checkLoggedInError: { error: 'notLogged' }, // <- throws error if user is not logged in
  validate: null,

  run ({ id }) {
    // ...
  }
})

单元测试

describe('resetEdit', () => {
  it('should reset data', (done) => {
    resetEdit.call({ id: 'IDString' })
  })
})

单元测试抛出Error: [notLogged]

1 个答案:

答案 0 :(得分:1)

编辑:

validated-method具有提供上下文的内置方式,并在README中进行了记录,完全针对您问题中的情况。

  

方法#_execute(context:Object,args:Object)

     

从测试代码中调用此方法以模拟代表特定用户调用方法:

     

source

  it('should reset data', (done) => {
      resetEdit._execute({userId: '123'}, { id: 'IDString' });
      done();
  });

原始答案:

我相信这可以使用DDP._CurrentMethodInvocation流星环境变量来实现。

如果在其值为对象userId字符串的作用域中运行测试,则它将与方法调用上下文对象的其余部分合并,并且mixin不会失败。

describe('resetEdit', () => {
  it('should reset data', (done) => {
    DDP._CurrentMethodInvocation.withValue({userId: '123'}, function() {
      console.log(DDP._CurrentInvocation.get()); // {userId: '123'}
      resetEdit.call({ id: 'IDString' });
      done();
    })
  });
})