Parse platform 如何在解析测试中设置经过身份验证的用户?

Parse platform 如何在解析测试中设置经过身份验证的用户?,parse-platform,Parse Platform,我已经为Parse配置了一些测试,但我不知道如何在Parse.Cloud.run中设置经过身份验证的用户: it('set user authenticated', function(done) { var user = new Parse.User({username: 'example2', password: 'example'}); user.save(); Promise.resolve() .then(function() { return Parse.Clo

我已经为Parse配置了一些测试,但我不知道如何在
Parse.Cloud.run
中设置经过身份验证的用户:

it('set user authenticated', function(done) {
  var user = new Parse.User({username: 'example2', password: 'example'});
  user.save();
  Promise.resolve()
  .then(function() {
    return Parse.Cloud.run('thread', { user: { id: user.id } });
  })
});
因此,在云函数中,我有
request.user.id
,它抛出
未定义的request.user


更多信息:

在上面的代码中使用承诺时出现错误:

user.save();
Promise.resolve()
   .then(function() {
     return Parse.Cloud.run('thread', { user: { id: user.id } });
   })
您不想使用
Promise.resolve().then()
。您需要
user.save().then()

下面是两组工作单元测试,我认为它们是您想要的

第一个将用户id作为参数传递:

describe('pass parameters to cloud code', () => {
  // set up the cloud code function
  beforeEach(() => {
    Parse.Cloud.define('thread', (request, response) => {
      // just return the user id that passed in so we can test it.
      response.success(request.params.user.id);
    });
  });

  it('should pass parameters', (done) => {
    const user = new Parse.User({ 
      username: 'example2',
      password: 'example' 
    });

    user.save()
      .then(() => Parse.Cloud.run('thread', { user: { id: user.id } }))
      .then((result) => expect(result).toBe(user.id))
      .then(done)
      .catch(done.fail);
  });
});
第二组测试显示了如何将经过身份验证的用户传递给云代码

describe('user in cloud code unit test', () => {
  beforeEach(() => {
    Parse.Cloud.define('thread', (request, response) => {
      const result = request.user
        ? request.user
        : 'no user set';
      response.success(result);
    });
  });

  it('should not have a user', (done) => {
    Parse.Cloud.run('thread')
      .then(result => expect(result).toBe('no user set'))
      .then(done)
      .catch(done.fail);
  });

  it('should get the logged in user', (done) => {
    Parse.User.signUp('Alice', 'Password', { name: 'value' })
      // note that we don't have to pass the logged in user
      // if there is a logged in user, it'll be in request.user           
      .then(() => Parse.Cloud.run('thread'))
      .then(userAsResult => expect(userAsResult.get('username', 'Alice')))
      .then(done)
      .catch(done.fail);
  });
});

谢谢,我需要在测试中发送它,而不是检查它是否是当前用户OK,使用我指出的代码习惯用法用实际测试编辑答案。真棒!但这会覆盖实际函数,我无法测试实际函数。另外,如果您发送
{user:{id:user.id}
,它将在
request.params.user.id
的云函数中读取,而不是在
request.user
中读取。用户将要测试的代码拉入函数,然后将其导出。这样,在测试中,您可以
Parse.Cloud.define('toTest',exportedFunction)
并且您仍然可以在定义
exportedFunction
的文件中
Parse.Cloud.define('blah',exportedFunction)
。如果我将函数作为分离函数而不是云函数进行测试,这可能会起作用,因此我必须将用户作为函数的参数传递。这不是我期望的答案,但它是有效的,所以我会将其标记为正确的,谢谢!