loopback-testing:用户和角色测试的正确方法是什么

时间:2015-08-31 23:08:00

标签: node.js testing loopbackjs

我正在尝试使用环回测试编写测试。

我有点困惑,根本没有任何文件。

我想测试一个只有角色为“admin”的用户才具有WRITE权限的模型。

现在,如果我这样做:

lt.describe.whenCalledByUserWithRole(test_config.adminUserCredentials, test_config.adminRole, ....)

loopback实际上会在登录前创建一个test_config.adminUserCredentials的用户! 它为什么这样做?

正确的行为,恕我直言,应该是:

  • 在测试设置中创建用户
  • 在测试设置中创建角色
  • 将角色与用户相关联
  • 运行测试时,仅检查用户是否拥有所请求操作的权限

但是使用环回测试看起来很棘手。如果我在安装程序中创建用户,测试将崩溃,因为whenCalledByUserWithRole将在此过程中尝试再次创建用户,该环回将拒绝说用户已存在。如果我没有创建用户并调用whenCalledByUserWithRole,则由于某种原因(即使名称暗示如此),该用户将不会与“admin”角色关联,并且测试失败。

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

我最终编写了一个自己的扩展来进行环回测试:

var app         = require('../server/server.js');
var _beforeEach = require('loopback-testing').beforeEach;
var _describe = require('loopback-testing').describe;

var helpers = exports = module.exports = { 
  describe: _describe,
  it: _it,
  beforeEach: _beforeEach
};

_beforeEach.givenExistingUserWithRole = function(credentials, role, optionalHandler) {
  console.log("_beforeEach.givenExistingUserWithRole");

  before(function(cb) {
    var test = this;
    username = credentials.username;
    pwd      = credentials.password;

    loginCredentials = {username:username,password:pwd};
    app.models.User.login(loginCredentials, function(err, token) {
      if(err) {
        console.log("Error logging in test user! " + err);
      } else {
        console.log("Test user successfully logged in.");
        test.loggedInAccessToken = token;
        console.log(token);
      }   
       cb();
    }); 
  }); 

  afterEach(function(done) {
  var test = this;
  console.log(this.loggedInAccessToken);
  this.loggedInAccessToken.destroy(function(err) {
    if(err) return done(err);
    test.loggedInAccessToken = undefined;
    done();
    }); 
  }); 
}