このコードの初めにデータベースからユーザーを見つける方法を理解しようとしていますが、ユーザーはコードの後半に作成されます。後で作成されている間にMongoDbから最初にユーザーを見つけるモチーフ
モカドキュメントは
テストの後、前に表示される、またはあなたのフックに散在することができます。と言いますフックは、必要に応じて定義された順序で実行されます。すべてのbefore()フックが実行され、次にbeforeEach()フック、テスト、afterEach()フック、およびafter()フック(一度)が含まれます。ユーザーが後で来るbeforeEach機能で作成されている間、ユーザーのvkarpov15 'は、ここで見つけることができますどのように
var assert = require('assert');
var express = require('express');
var status = require('http-status');
var superagent = require('superagent');
var wagner = require('wagner-core');
var URL_ROOT = 'http://localhost:3000';
var PRODUCT_ID = '000000000000000000000001';
describe('User API', function() {
var server;
var Category;
var Product;
var User;
before(function() {
var app = express();
models = require('./models')(wagner);
Category = models.Category;
Product = models.Product;
User = models.User;
app.use(function(req, res, next) {
User.findOne({}, function(error, user) {
assert.ifError(error);
req.user = user;
console.log(user);
next();
});
});
app.use(require('./api')(wagner));
server = app.listen(3000);
});
after(function() {
server.close;
});
beforeEach(function(done) {
Category.remove({}, function(error) {
assert.ifError(error);
Product.remove({}, function(error) {
assert.ifError(error);
User.remove({}, function(error) {
assert.ifError(error);
done();
});
});
});
});
beforeEach(function(done) {
var categories = [
{ _id: 'Electronics' },
{ _id: 'Phones', parent: 'Electronics' },
{ _id: 'Laptops', parent: 'Electronics' },
{ _id: 'Bacon' }
];
var products = [
{
name: 'LG G4',
category: { _id: 'Phones', ancestors: ['Electronics', 'Phones'] },
price: {
amount: 300,
currency: 'USD'
}
},
{
_id: PRODUCT_ID,
name: 'Asus Zenbook Prime',
category: { _id: 'Laptops', ancestors: ['Electronics', 'Laptops'] },
price: {
amount: 2000,
currency: 'USD'
}
},
{
name: 'Flying Pigs Farm Pasture Raised Pork Bacon',
category: { _id: 'Bacon', ancestors: ['Bacon'] },
price: {
amount: 20,
currency: 'USD'
}
}
];
var users = [{
profile: {
username: 'vkarpov15',
picture: 'http://pbs.twimg.com/profile_images/550304223036854272/Wwmwuh2t.png'
},
data: {
oauth: 'invalid',
cart: []
}
}];
Category.create(categories, function(error) {
assert.ifError(error);
Product.create(products, function(error) {
assert.ifError(error);
User.create(users, function(error) {
assert.ifError(error);
done();
});
});
});
});
it('can save users cart', function(done) {
var url = URL_ROOT + '/me/cart';
superagent.
put(url).
send({
data: {
cart: [{ product: PRODUCT_ID, quantity: 1 }]
}
}).
end(function(error,res) {
assert.ifError(error);
assert.equal(res.status, status.OK);
User.findOne({}, function(error, user) {
assert.ifError(error);
assert.equal(user.data.cart.length, 1);
assert.equal(user.data.cart[0].product, PRODUCT_ID);
assert.equal(user.data.cart[0].quantity, 1);
done();
});
});
});
})
。
app.use(function(req, res, next) {
User.findOne({}, function(error, user) {
assert.ifError(error);
req.user = user;
console.log(user);
next();
});
});
それが後のコードでは、ここで作成されます。
Category.create(categories, function(error) {
assert.ifError(error);
Product.create(products, function(error) {
assert.ifError(error);
User.create(users, function(error) {
assert.ifError(error);
done();
});
});
});
私は、beforeEachブロックでユーザーが作成されていることを理解しています。しかし、文書では、beforeブロックがbeforeブロックの前に来ると言います。それで、beforeブロックはbeforeEachブロックで作成されたユーザーにどのようにアクセスできますか? – DowinskiField
私が言ったように、beforeブロックはユーザーにアクセスしません。ユーザーを取得する高速ミドルウェア(app.use)のみを登録しますが、そこでは呼び出されません。 –
私は参照してください。だから、ブロックの機能は何ですか?ブロックはどこに呼び出されますか? – DowinskiField