我正在尝试使用环回测试编写测试。
我有点困惑,根本没有任何文件。
我想测试一个只有角色为“admin”的用户才具有WRITE权限的模型。
现在,如果我这样做:
lt.describe.whenCalledByUserWithRole(test_config.adminUserCredentials, test_config.adminRole, ....)
loopback
实际上会在登录前创建一个test_config.adminUserCredentials
的用户!
它为什么这样做?
正确的行为,恕我直言,应该是:
但是使用环回测试看起来很棘手。如果我在安装程序中创建用户,测试将崩溃,因为whenCalledByUserWithRole
将在此过程中尝试再次创建用户,该环回将拒绝说用户已存在。如果我没有创建用户并调用whenCalledByUserWithRole
,则由于某种原因(即使名称暗示如此),该用户将不会与“admin”角色关联,并且测试失败。
我该如何正确地做到这一点?
答案 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();
});
});
}