gpt4 book ai didi

javascript - 如何使用 Mocha 测试 Meteor.users

转载 作者:行者123 更新时间:2023-11-29 16:03:12 26 4
gpt4 key购买 nike

我有一个函数如下:

if(Meteor.isServer) {
Meteor.methods({
addUser: function (newUser) {
check(newUser, { email: String, password: String });
userId = Accounts.createUser(newUser);
return userId;
},
getUser: function (userID) {
check(userID, String);
return Meteor.users.find({_id: userID}).fetch();
}
});

我正在尝试使用 Mocha 测试此功能:

if (Meteor.isServer) {
let testUser;
describe('Users', () => {
it("Add User", (done) => {

testUser = {email: 'test@test.test', password: 'test'};

try {
testUser._id = Meteor.call('addUser', testUser);
console.log(Accounts.users.find({_id: testUser._id}).fetch());
done();
} catch (err) {
assert.fail();
}
});

it("Get user", (done) => {
try {
Meteor.call('getUser', testUser._id);
done();
} catch (err) {
assert.fail();
}
});
});

而且我知道带有“addUser”的 meteor 调用有效,因为之后的 console.log 返回了我刚刚创建的用户,并且当我使用“meteor test --driver-package practicalmeteor:摩卡”

但随后我进入了第二个测试部分,我尝试通过 meteor 调用“getUser”获取用户,但后来我卡住了:

'无法调用未定义的'find'方法'

现在我知道区别在于我使用“Meteor.users”而不是“Account.users”来查找用户,但我完全不知道这两者之间的区别。我是否应该用 Accounts.user 方法调用替换所有 Meteor.users 方法调用?你会如何测试这个?

最佳答案

我只是偶然发现了这篇文章,因为几个小时前我处理过同样的问题。

正如我在您的代码中看到的,您的 testUser 是在您的第一个单元中定义的 (it("Add User"...){})。我建议您不要在第二个单元中使用第一个单元的值。

您可能更愿意使用 beforeEach 和 afterEach 为每个单元进行干净的设置,然后在第二个测试单元中创建一个新用户。您还应该在每个单元后清理您的数据库:

describe('Users', () => {

// use this for each test
let testUser;


beforeEach(() => {
// let's always create a new clean testUser object
testUser = {email: 'test@test.test', password: 'test'};
});

afterEach(() => {
// Remove the user to keep our db clean
if (testUser._id)
Meteor.users.remove(testUser._id);
});

it("Add User", (done) => {
testUser._id = Meteor.call('addUser', testUser);
const users = Meteor.users.find({_id: testUser._id}).fetch();
const user = users[0];
assert.isNotNull(user);
assert.isDefined(user);
assert.equal(user._id, testUser._id);
done();

});

it("Get user", (done) => {
// get a new id from our previously tested
// (and assume to be working) function
testUser._id = Meteor.call('addUser', testUser);

const user = Meteor.call('getUser', testUser._id);
assert.isNotNull(user);
assert.isDefined(user);
assert.equal(user._id, testUser._id);
done();
});
});

我还发现,您的“getUser”方法返回一个数组,所以我将其更改为:

getUser: function (userID) {
check(userID, String);
const users = Meteor.users.find({_id: userID}).fetch();
return users[0];
}

所有测试和运行。

关于javascript - 如何使用 Mocha 测试 Meteor.users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com