рдирд┐рдГрд╢реБрд▓реНрдХ Laika рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ MeteorJS рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреЛрд╕реНрдЯ рдЕрд░реБрдгреЛрдбрд╝рд╛ рд╕реБрд╕рд┐рд░рд┐рдкрд╛рд▓рд╛ рд╕реЗ рд▓рд╛рдЗрдХрд╛ рдореЗрдЯреНрдпреЛрд░рдЬ рдПрд╕ рдПрдкреНрд▓реАрдХреЗрд╢рди рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИ ред рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ:




рд╕реНрдерд╛рдкрдирд╛


1. npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
sudo npm install -g laika 

2. PhantomJS рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ ред
3. рднрд╛рдЧреЛ рдордВрдЧреЛрд▓реЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 $ mongod --smallfiles --noprealloc --nojournal 


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ


рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред
 $ meteor create meteor-laika 

рдЗрд╕рдореЗрдВ рдХрд▓реЗрдХреНрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдкреЛрд╕реНрдЯреЗрдЬреЗрдЬ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ
 // collections/posts.js Posts = new Meteor.Collection('posts'); 

рдЗрд╕рдореЗрдВ рдЯреЗрд╕реНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдкреЛрд╕реНрдЯреЗрдЬреЗрдЬ рдмрдирд╛рдПрдВ
 //tests/posts.js var assert = require('assert'); suite('Posts', function() { test('in the server', function(done, server) { server.eval(function() { Posts.insert({title: 'hello title'}); var docs = Posts.find().fetch(); emit('docs', docs); }); server.once('docs', function(docs) { assert.equal(docs.length, 1); done(); }); }); }); 

рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкреЛрд╕реНрдЯреНрд╕ рдирд╛рдордХ рдПрдХ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЗрд╕реНрдЯ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрд╛:
  server.eval(function() { Posts.insert({title: 'hello title'}); //   var docs = Posts.find().fetch(); //    emit('docs', docs); //     }); 

рдЬрдм рд╣рдо рдПрдорд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреБрдХреНрдд рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣рд╛рдБ рд╣реИрдВ:
  server.once('docs', function(docs) { //   assert.equal(docs.length, 1); //     ,    done(); //   }); 

рдкрд░реАрдХреНрд╖рдг рддреИрдпрд╛рд░ рд╣реИред рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдЦреЗрдВ
 $ laika 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг


рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 test('using both client and the server', function(done, server, client) { server.eval(function() { Posts.find().observe({ added: addedNewPost //    ,   ,   addedNewPost }); function addedNewPost(post) { emit('post', post); //   "post"   post (    ) } }).once('post', function(post) { //   "post" assert.equal(post.title, 'hello title'); //     ,     done(); //   }); client.eval(function() { Posts.insert({title: 'hello title'}); //     }); }); 

рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрдЧрд╛:

рджреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг


рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рдЕрдВрджрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
 test('using two client', function(done, server, c1, c2) { c1.eval(function() { Posts.find().observe({ added: addedNewPost //         }); function addedNewPost(post) { emit('post', post); //      ,      "post" } emit('done'); //  "done" }).once('post', function(post) { assert.equal(post.title, 'from c2'); //    ,  ,   done(); }).once('done', function() { c2.eval(insertPost); //      insertPost }); function insertPost() { Posts.insert({title: 'from c2'}); //     (  ,   ),   } }); 

рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд▓реЛрд╣реЗ-рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдлреА рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд░рд┐рдХреЙрд░реНрдб рдЫреЛрдЯрд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди, рдЙрдореНрдореАрдж рд╣реИ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ рдЗрд╕ рджрд┐рд▓рдЪрд╕реНрдк рдврд╛рдВрдЪреЗ рдХреЛ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреГрд╖реНрда рдХрд╛ рдПрдХ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реБрдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рд╕рдордп MeteorJS рдкрд░ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ laika рдЖрдкрдХреЗ рд▓рд┐рдП рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In213171/


All Articles