でMeteor.usersをテストする方法:次のように私は機能を持っているモカ
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();
}
});
を私はモカ使用してこの機能をテストしようとしています:
if (Meteor.isServer) {
let testUser;
describe('Users',() => {
it("Add User", (done) => {
testUser = {email: '[email protected]', 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'は動作します。その後のconsole.logは、私が作成したユーザーを返し、 "流星テスト - ドライバパッケージ実用的な:mocha"で実行すると最初のテストが成功するためです
しかし、セコにND私は流星コール「のgetUser」でユーザーを取得しよう部分を、テスト、その後私は立ち往生:
「メソッドを呼び出すことはできません 『』未定義の」
を見つける今、私は違いがあることを知っています私はユーザーを見つけるために 'Account.users'の代わりに 'Meteor.users'を使用していますが、これらの2つの違いが何であるかは完全に暗いです。すべてのMeteor.usersメソッド呼び出しをAccounts.userメソッド呼び出しで置き換える必要がありますか?どのようにこれをテストしますか?
実際には、テスト用のユーザーアカウントを作成するためにMeteorメソッドを使用する必要はありません。テストのためのユーザーアカウントを作成する流星法を持つことは、かなり汚いです。 '' '' '' dburles:factory''パッケージを使って、テストユーザを(ロールの有無にかかわらず)作成し、検証したメソッドを実行することができます: '' 'methodName._execute(userId、data);' '' userIdはオブジェクトです: '' {userId:userId} ''と '' 'data'''はメソッドの引数です。また、コンテキストとしてuserIdを渡す通常の流星メソッドを呼び出すことができますが、デモのためにこのコメントにスペースがありません – Sean
あなたがテストしたくない振る舞いを嘲笑するのは正しい方法です、私は同意します。この質問では、ユーザーアカウントを作成する方法がテスト対象のメソッドであり、テスト用に特別に設計されたメソッドではありません。したがって、私は@justanoobがどのように最小限の労力で問題を解決するかという有用な答えを示しました。私は、他のテストでは、ユーザの作成が暗黙のうちに集められていると仮定しました。 – Jankapunkt
私はこれがポスターのオリジナルの質問に答えないと思います。私が知る限り、 'find is undefined'エラーについては説明しませんが、いくつかの詳細を見逃している可能性があります。私はOPと同じ問題を抱えていますが、Accounts.users.findとMeteor.users.findの両方が同じエラーをスローします:未定義のプロパティ 'find'を読み取ることができません。私の場合、私は1つのユニットで作成し、もう一方のユニットをチェックしていません。私はこれに絶対に困惑し、どこでも答えを見つけることができません。 –