হুক কলব্যাক পরীক্ষা করা হচ্ছে


34

আমি টিডিডি ব্যবহার করে একটি প্লাগইন বিকাশ করছি এবং একটি জিনিস যা আমি পুরোপুরি পরীক্ষায় ব্যর্থ হলাম তা হুক ... হুক।

মানে ঠিক আছে, আমি হুক কলব্যাক পরীক্ষা করতে পারি, তবে একটি হুক আসলে ট্রিগার করলে (কাস্টম হুক এবং ওয়ার্ডপ্রেস ডিফল্ট হুক উভয়) কীভাবে পরীক্ষা করতে পারি? আমি ধরে নিয়েছি যে কিছু উপহাস সাহায্য করবে, তবে আমি কী অনুপস্থিত তা সহজেই অনুধাবন করতে পারি না।

আমি WP-CLI দিয়ে টেস্ট স্যুটটি ইনস্টল করেছি। এই উত্তর অনুযায়ী , initহুক ট্রিগার করা উচিত, তবুও ... এটি না; এছাড়াও কোডটি ওয়ার্ডপ্রেসের ভিতরে কাজ করে।

আমার উপলব্ধি থেকে বুটস্ট্র্যাপটি সর্বশেষে লোড হয়ে গেছে, তাই থ্রিজিটি ট্রিগার না করা এক ধরণের অর্থবোধ করে, তাই প্রশ্নটি রয়ে গেল: হুকগুলি ট্রিগার করা হলে আমি কীভাবে পরীক্ষা করব?

ধন্যবাদ!

বুটস্ট্র্যাপ ফাইলটি দেখতে এমন দেখাচ্ছে:

$_tests_dir = getenv('WP_TESTS_DIR');
if ( !$_tests_dir ) $_tests_dir = '/tmp/wordpress-tests-lib';

require_once $_tests_dir . '/includes/functions.php';

function _manually_load_plugin() {
  require dirname( __FILE__ ) . '/../includes/RegisterCustomPostType.php';
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );

require $_tests_dir . '/includes/bootstrap.php';

পরীক্ষিত ফাইলটি এর মতো দেখাচ্ছে:

class RegisterCustomPostType {
  function __construct()
  {
    add_action( 'init', array( $this, 'register_post_type' ) );
  }

  public function register_post_type()
  {
    register_post_type( 'foo' );
  }
}

এবং পরীক্ষা নিজেই:

class CustomPostTypes extends WP_UnitTestCase {
  function test_custom_post_type_creation()
  {
    $this->assertTrue( post_type_exists( 'foo' ) );
  }
}

ধন্যবাদ!


আপনি যদি চালাচ্ছেন phpunit, আপনি কি ব্যর্থ বা পরীক্ষায় উত্তীর্ণ হতে পারেন? আপনি কি ইনস্টল করেছেন bin/install-wp-tests.sh?
সেভেন

আমি মনে করি যে সমস্যার একটি অংশ হ'ল সম্ভবত RegisterCustomPostType::__construct()যখন পরীক্ষাগুলির জন্য প্লাগইন লোড করা হয় তখন কখনই ডাকা হয় না। আপনি বাগ # 29827 দ্বারা আক্রান্ত হচ্ছেন এটিও সম্ভব ; হতে পারে আপনার ডাব্লুপি'র ইউনিট পরীক্ষা স্যুটটির সংস্করণ আপডেট করার চেষ্টা করুন।
জেডি

@ সোভেন: হ্যাঁ, পরীক্ষা ব্যর্থ হচ্ছে; আমি ইনস্টল bin/install-wp-tests.sh(যেহেতু আমি WP-CLI ব্যবহৃত) @JD: RegisterCustomPostType :: __ কনস্ট্রাক্ট হয় নামক (শুধু একটি যোগ die()বিবৃতি এবং phpunit স্টপ সেখানে)
Ionut Staicu

আমি ইউনিট টেস্টিংয়ের পক্ষে খুব বেশি নিশ্চিত নই (আমার ফোরটি নয়) তবে আক্ষরিক দৃষ্টিকোণ থেকে আপনি এটি did_action()পরীক্ষা করতে ব্যবহার করতে পারেন যে পদক্ষেপগুলি নিষ্ক্রিয় হয়েছে কিনা।
রাস্ট

@ রার্স্ট: পরামর্শের জন্য ধন্যবাদ, তবে এটি এখনও কার্যকর হয়নি। কোনও কারণে, আমি মনে করি যে সময়টি ভুল (পরীক্ষাগুলি initহুকের আগে চালানো হয় )।
আয়নুত স্টাইকু

উত্তর:


72

বিচ্ছিন্নতা পরীক্ষা

প্লাগইন বিকাশ করার সময়, এটি পরীক্ষা করার সর্বোত্তম উপায়টি ওয়ার্ডপ্রেস পরিবেশ লোড না করেই হয় ।

আপনি যদি ওয়ার্ডপ্রেস ছাড়াই সহজে পরীক্ষা করা যায় এমন কোড লিখেন তবে আপনার কোডটি আরও ভাল

প্রতিটি উপাদান যা ইউনিট পরীক্ষিত, পৃথকীকরণে পরীক্ষা করা উচিত : আপনি যখন কোনও ক্লাস পরীক্ষা করেন তখন আপনাকে কেবলমাত্র সেই নির্দিষ্ট বর্গটি পরীক্ষা করতে হবে, ধরে নিলে অন্য সমস্ত কোড নিখুঁতভাবে কাজ করছে।

বিচ্ছিন্ন

এই কারণেই ইউনিট টেস্টগুলিকে "ইউনিট" বলা হয়।

অতিরিক্ত সুবিধা হিসাবে, লোডিং কোর ছাড়াই, আপনার পরীক্ষাটি আরও দ্রুত চলবে।

কন্সট্রাক্টরের হুকগুলি এড়িয়ে চলুন

একটি টিপ যা আমি আপনাকে দিতে পারি তা হল কনস্ট্রাক্টরগুলিতে হুক লাগানো এড়ানো। এটি এমন একটি জিনিস যা আপনার কোডকে বিচ্ছিন্নভাবে পরীক্ষণযোগ্য করে তুলবে।

ওপিতে পরীক্ষার কোডটি দেখুন:

class CustomPostTypes extends WP_UnitTestCase {
  function test_custom_post_type_creation() {
    $this->assertTrue( post_type_exists( 'foo' ) );
  }
}

এবং ধরা যাক এই পরীক্ষাটি ব্যর্থঅপরাধী কে ?

  • হুক আদৌ যুক্ত করা হয়নি বা সঠিকভাবে না?
  • যে পদ্ধতিটি পোষ্ট টাইপটি নিবন্ধন করে সেগুলিকে আদৌ বলা হয়নি বা ভুল যুক্তি দিয়ে?
  • ওয়ার্ডপ্রেসে একটি বাগ আছে?

কীভাবে এটি উন্নত করা যায়?

আসুন ধরে নেওয়া যাক আপনার ক্লাস কোডটি হ'ল:

class RegisterCustomPostType {

  function init() {
    add_action( 'init', array( $this, 'register_post_type' ) );
  }

  public function register_post_type() {
    register_post_type( 'foo' );
  }
}

(দ্রষ্টব্য: আমি উত্তরের বাক্সের জন্য ক্লাসের এই সংস্করণটি উল্লেখ করব)

এই ক্লাসটি আমি যেভাবে লিখেছি তা আপনাকে কল না করে ক্লাসের উদাহরণ তৈরি করতে দেয় add_action

উপরের ক্লাসে 2 টি জিনিস পরীক্ষা করতে হবে:

  • পদ্ধতি init আসলে কল add_actionএটা সঠিক আর্গুমেন্ট ক্ষণস্থায়ী
  • পদ্ধতিটি register_post_type আসলেregister_post_type ফাংশনকে কল করে

আমি বলিনি যে পোস্টের ধরণ রয়েছে কিনা তা পরীক্ষা করে দেখতে হবে: আপনি যদি যথাযথ পদক্ষেপটি যুক্ত করেন এবং যদি আপনি কল করেন register_post_typeতবে কাস্টম পোস্ট প্রকারটি অবশ্যই উপস্থিত থাকতে পারে: যদি এটি উপস্থিত না থাকে তবে এটি ওয়ার্ডপ্রেস সমস্যা।

মনে রাখবেন: আপনি যখন আপনার প্লাগইনটি পরীক্ষা করেন তখন আপনার কোডটি পরীক্ষা করতে হয় , ওয়ার্ডপ্রেস কোড নয়। আপনার পরীক্ষাগুলিতে আপনাকে ধরে নিতে হবে যে ওয়ার্ডপ্রেস (আপনি যে কোনও বাহ্যিক লাইব্রেরি ব্যবহার করেন ঠিক তেমন) ভাল কাজ করে। এটি ইউনিট পরীক্ষার অর্থ ।

কিন্তু ... অনুশীলনে?

যদি ওয়ার্ডপ্রেসটি লোড না করা হয়, আপনি যদি উপরের ক্লাসের পদ্ধতিগুলি কল করার চেষ্টা করেন তবে আপনি মারাত্মক ত্রুটি পান, তাই আপনাকে ফাংশনগুলি উপহাস করতে হবে।

"ম্যানুয়াল" পদ্ধতি

নিশ্চিতভাবেই আপনি আপনার বিদ্রূপের গ্রন্থাগারটি লিখতে পারেন বা "ম্যানুয়ালি" বিদ্রূপের প্রতিটি পদ্ধতিতে লিখতে পারেন। এটা সম্ভব. আমি কীভাবে এটি করব তা বলব, তবে তারপরে আমি আপনাকে একটি সহজ পদ্ধতি দেখাব।

পরীক্ষাগুলি চলাকালীন যদি ওয়ার্ডপ্রেস লোড না হয় তবে এর অর্থ আপনি এর কার্যগুলি পুনরায় সংজ্ঞায়িত করতে পারেন, যেমন add_actionবা register_post_type

আসুন ধরে নেওয়া যাক আপনার বুটস্ট্র্যাপ ফাইল থেকে লোড হওয়া একটি ফাইল রয়েছে, যেখানে আপনার রয়েছে:

function add_action() {
  global $counter;
  if ( ! isset($counter['add_action']) ) {
    $counter['add_action'] = array();
  }
  $counter['add_action'][] = func_get_args();
}

function register_post_type() {
  global $counter;
  if ( ! isset($counter['register_post_type']) ) {
    $counter['register_post_type'] = array();
  }
  $counter['register_post_type'][] = func_get_args();
}

আমি প্রতিটি বার যখন ডাকা হয় তখন কেবল একটি উপাদানকে বিশ্বব্যাপী অ্যারেতে যুক্ত করার জন্য ফাংশনগুলি পুনরায় লিখেছিলাম।

এখন আপনার নিজের বেস টেস্ট কেস ক্লাস বাড়ানো (আপনার যদি ইতিমধ্যে একটি না থাকে) তৈরি করা উচিত PHPUnit_Framework_TestCase: এটি আপনাকে সহজেই আপনার পরীক্ষাগুলি কনফিগার করতে দেয়।

এটি এমন কিছু হতে পারে:

class Custom_TestCase extends \PHPUnit_Framework_TestCase {

    public function setUp() {
        $GLOBALS['counter'] = array();
    }

}

এইভাবে, প্রতিটি পরীক্ষার আগে, বৈশ্বিক কাউন্টার পুনরায় সেট করা হয়।

এবং এখন আপনার পরীক্ষার কোড (আমি উপরে পোস্ট করা পুনরায় লিখিত ক্লাসটি উল্লেখ করি):

class CustomPostTypes extends Custom_TestCase {

  function test_init() {
     global $counter;
     $r = new RegisterCustomPostType;
     $r->init();
     $this->assertSame(
       $counter['add_action'][0],
       array( 'init', array( $r, 'register_post_type' ) )
     );
  }

  function test_register_post_type() {
     global $counter;
     $r = new RegisterCustomPostType;
     $r->register_post_type();
     $this->assertSame( $counter['register_post_type'][0], array( 'foo' ) );
  }

}

আপনার লক্ষ করা উচিত:

  • আমি দুটি পদ্ধতি পৃথকভাবে কল করতে সক্ষম হয়েছি এবং ওয়ার্ডপ্রেস মোটেও লোড হয় না। এইভাবে যদি কোনও পরীক্ষা ব্যর্থ হয় তবে আমি জানি ঠিক অপরাধী কে।
  • যেমনটি আমি বলেছি, এখানে আমি পরীক্ষা করেছি যে ক্লাসগুলি ডাব্লুপি ফাংশনকে প্রত্যাশিত যুক্তি দিয়ে কল করে। সিপিটি আসলেই আছে কিনা তা পরীক্ষা করার দরকার নেই। আপনি যদি সিপিটির অস্তিত্ব পরীক্ষা করে থাকেন, তবে আপনি আপনার প্লাগইন আচরণ নয়, ওয়ার্ডপ্রেস আচরণ পরীক্ষা করছেন ...

চমৎকার .. তবে এটি পিটা!

হ্যাঁ, আপনাকে যদি সমস্ত ওয়ার্ডপ্রেস ফাংশন ম্যানুয়ালি উপহাস করতে হয় তবে এটি সত্যিই একটি ব্যথা। আমি দিতে পারি কিছু সাধারণ পরামর্শ হ'ল সম্ভব কয়েকটি ডাব্লুপি ফাংশন ব্যবহার করা: আপনার ওয়ার্ডপ্রেস পুনরায় লেখার দরকার নেই , তবে আপনি কাস্টম ক্লাসগুলিতে ব্যবহার করেন এমন অ্যাবস্ট্রাক্ট ডাব্লুপি ফাংশন যাতে তাদের ঠাট্টা করা যায় এবং সহজেই পরীক্ষা করা যায়।

উদাহরণস্বরূপ, উদাহরণস্বরূপ, আপনি একটি শ্রেণি লিখতে পারেন যা পোস্ট ধরণের register_post_typeনিবন্ধগুলি দেয়, প্রদত্ত যুক্তি দিয়ে 'init' এ ফোন করে। এই বিমূর্ততার সাথে আপনার এখনও সেই শ্রেণিটি পরীক্ষা করা দরকার, তবে আপনার কোডের অন্যান্য জায়গাগুলিতে যে পোস্ট ধরণের রেজিস্ট্রেশন করে আপনি সেই শ্রেণির ব্যবহার করতে পারেন, পরীক্ষাগুলিতে এটি উপহাস করে (সুতরাং ধরে নেওয়া যায় যে এটি কাজ করে)।

আশ্চর্যের বিষয়টি হ'ল, আপনি যদি এমন কোনও ক্লাস লিখেন যা সিপিটি রেজিস্ট্রেশনকে বিমূর্ত করে, আপনি এটির জন্য একটি পৃথক সংগ্রহশালা তৈরি করতে পারেন এবং সুরকারের মতো আধুনিক সরঞ্জামগুলির জন্য আপনাকে এটি প্রয়োজনীয় সমস্ত প্রকল্পে এম্বেড করুন: একবার পরীক্ষা করুন, সর্বত্র ব্যবহার করুন । এবং যদি আপনি এটিতে কোনও বাগ খুঁজে পান তবে আপনি এটি এক জায়গায় ঠিক করতে পারেন এবং একটি সরল composer updateপ্রকল্পের সাহায্যে যেখানে এটি ব্যবহৃত হয় তাও ঠিক করা হয়েছে।

দ্বিতীয়বারের জন্য: বিচ্ছিন্নভাবে টেস্টযোগ্য কোডটি লেখার অর্থ আরও ভাল কোড লেখার।

তবে তাড়াতাড়ি বা পরে আমাকে কোথাও ডাব্লুপি ফাংশন ব্যবহার করা দরকার ...

অবশ্যই. আপনি কখনই কোর এর সমান্তরালভাবে কাজ করা উচিত নয় , এটি কোন মানে হয় না। আপনি এমন ক্লাস লিখতে পারেন যা ডাব্লুপি ফাংশনগুলিকে আবৃত করে তবে সেগুলি ক্লাসগুলিও পরীক্ষা করা দরকার। উপরে বর্ণিত "ম্যানুয়াল" পদ্ধতিটি খুব সাধারণ কাজের জন্য ব্যবহার করা যেতে পারে, তবে যখন কোনও শ্রেণিতে অনেকগুলি ডব্লিউপি ফাংশন থাকে এটি ব্যথা হতে পারে।

ভাগ্যক্রমে, সেখানে ভাল লোক রয়েছে যারা ভাল জিনিস লেখেন। 10up সবচেয়ে বড় ডাব্লু সংস্থার এক, মানুষ যে পরীক্ষা প্লাগিন করার সঠিক উপায় চান তাদের জন্য একটি নিরতিশয় গ্রন্থাগার বজায় রাখে। এটা হয় WP_Mock

এটি আপনাকে ডাব্লুপি ফাংশনকে একটি হুক উপহাস করার অনুমতি দেয় । ধরে নিই যে আপনি আপনার পরীক্ষাগুলিতে লোড করেছেন (রেপো রিডমি দেখুন) আমি উপরে লিখেছি একই পরীক্ষায় পরিণত হয়:

class CustomPostTypes extends Custom_TestCase {

  function test_init() {
     $r = new RegisterCustomPostType;
     // tests that the action was added with given arguments
     \WP_Mock::expectActionAdded( 'init', array( $r, 'register_post_type' ) );
     $r->init();
  }

  function test_register_post_type() {
     // tests that the function was called with given arguments and run once
     \WP_Mock::wpFunction( 'register_post_type', array(
        'times' => 1,
        'args' => array( 'foo' ),
     ) );
     $r = new RegisterCustomPostType;
     $r->register_post_type();
  }

}

সরল, তাই না? এই উত্তরটি টিউটোরিয়াল নয় WP_Mock, সুতরাং আরও তথ্যের জন্য রেপো রিডমিটি পড়ুন, তবে উপরের উদাহরণটি বেশ পরিষ্কার হওয়া উচিত, আমি মনে করি।

তদুপরি, আপনাকে কোনও বিদ্রূপাত্মক add_actionবা register_post_typeনিজের দ্বারা লেখার দরকার নেই , বা কোনও বৈশ্বিক চলক বজায় রাখতে হবে না।

এবং ডাব্লুপি ক্লাস?

ডাব্লুপি এর কিছু ক্লাসও রয়েছে এবং আপনি পরীক্ষা চালানোর সময় ওয়ার্ডপ্রেস যদি লোড না হয় তবে আপনাকে সেগুলি উপহাস করা দরকার।

যে ফাংশন উপহাস তুলনায় অনেক সহজ, PHPUnit উপহাস বস্তু একটি এমবেডেড সিস্টেম আছে, কিন্তু এখানে আমি সুপারিশ করতে চান উপহাস আপনাকে। এটি একটি খুব শক্তিশালী লাইব্রেরি এবং ব্যবহার করা খুব সহজ। তদুপরি, এটি একটি নির্ভরতা WP_Mock, সুতরাং আপনার যদি এটি থাকে তবে আপনার সাথে মশকরাও রয়েছে।

তবে কি WP_UnitTestCase?

ওয়ার্ডপ্রেস টেস্ট স্যুটটি ওয়ার্ডপ্রেস কোরটি পরীক্ষা করার জন্য তৈরি করা হয়েছিল এবং আপনি যদি কোরটিতে অবদান রাখতে চান তবে এটি গুরুত্বপূর্ণ, তবে এটি প্লাগইনগুলির জন্য ব্যবহার করা আপনাকে কেবল বিচ্ছিন্নতায় না পরীক্ষা করে তোলে।

আপনার নজর ডাব্লুপি ওয়ার্ল্ডের উপরে রাখুন: সেখানে অনেকগুলি আধুনিক পিএইচপি ফ্রেমওয়ার্ক এবং সিএমএস রয়েছে এবং এর মধ্যে কোনও ফ্রেমওয়ার্ক কোড ব্যবহার করে প্লাগইন / মডিউল / এক্সটেনশানগুলি (বা যা তাদের বলা হয়) পরীক্ষার পরামর্শ দেয় না।

আপনি যদি স্যুটগুলির একটি দরকারী বৈশিষ্ট্য কারখানাগুলি মিস করেন তবে আপনাকে জানতে হবে যে সেখানে দুর্দান্ত কিছু রয়েছে।

গটচ এবং ডাউনসাইডস

আমার এখানে প্রস্তাবিত কর্মপ্রবাহের অভাব রয়েছে এমন একটি কেস রয়েছে: কাস্টম ডাটাবেস পরীক্ষার

বস্তুত, যদি আপনি সেখানে (সর্বনিম্ন পর্যায়ে লিখতে মান ওয়ার্ডপ্রেস টেবিল এবং ফাংশন ব্যবহার $wpdbপদ্ধতি) আপনি প্রদান করার প্রয়োজন নেই আসলে লেখার ডেটা বা পরীক্ষা যদি তথ্য আসলে ডাটাবেসের মধ্যে শুধু নিশ্চিত করুন যে সঠিক পদ্ধতি সঠিক আর্গুমেন্ট সহ বলা হয় হও।

তবে, আপনি কাস্টম সারণী এবং ফাংশনগুলি দিয়ে প্লাগইন লিখতে পারেন যা সেখানে লেখার জন্য কোয়েরি তৈরি করে এবং পরীক্ষা করে যদি এই প্রশ্নগুলি আপনার দায়িত্ব হয় তবে এটি পরীক্ষা করতে পারেন।

এই ক্ষেত্রে ওয়ার্ডপ্রেস টেস্ট স্যুট আপনাকে অনেক সহায়তা করতে পারে এবং কিছু কাজ করার মতো ওয়ার্কপ্রেস চালনার জন্য ওয়ার্ডপ্রেস লোড করা দরকার হতে পারে dbDelta

(পরীক্ষার জন্য আলাদা ডিবি ব্যবহার করার দরকার নেই, তাই না?)

ভাগ্যক্রমে পিএইচপিউনিট আপনাকে "স্যুট "গুলিতে পৃথকভাবে চালিত হতে পারে এমন পরীক্ষাগুলি সংগঠিত করার অনুমতি দেয়, যাতে আপনি কাস্টম ডাটাবেস পরীক্ষার জন্য স্যুট লিখতে পারেন যেখানে আপনি ওয়ার্ডপ্রেস পরিবেশ (বা এর অংশ) লোড করেন আপনার বাকী সমস্ত পরীক্ষাগুলি ওয়ার্ডপ্রেস-মুক্ত রাখে

কেবলমাত্র এমন ক্লাসগুলিই লিখতে ভুলবেন না যে যতটা সম্ভব ডাটাবেস অপারেশনকে বিমূর্ত করে, অন্য সমস্ত প্লাগইন ক্লাস সেগুলি ব্যবহার করে যাতে মক ব্যবহার করে আপনি বেশিরভাগ শ্রেণীর সঠিকভাবে ডাটাবেস না নিয়ে পরীক্ষা করতে পারেন।

তৃতীয়বারের জন্য, বিচ্ছিন্নভাবে সহজে কোড টেস্টের কোড লেখার অর্থ আরও ভাল কোড লেখা।


5
পবিত্র বোকা, অনেক দরকারী তথ্য! ধন্যবাদ! একরকম আমি ইউনিট পরীক্ষার পুরো পয়েন্টটি মিস করতে পেরেছি (এখন অবধি, আমি কেবল কোড দোজের ভিতরেই পিএইচপি পরীক্ষার অনুশীলন করছিলাম)। আমি আজ আগে wp_mock সম্পর্কেও পেয়েছি, তবে কোনও কারণে আমি এটিকে এড়িয়ে চলার ব্যবস্থা করি। যে বিষয়টি আমাকে হতাশ করেছিল তা হ'ল যে কোনও পরীক্ষা, এটি যত ছোটই হোক না কেন এটি চালাতে কমপক্ষে দুই সেকেন্ড সময় লাগত (প্রথমবারের মতো ডাব্লুপি এনভি লোড করুন, দ্বিতীয়টি পরীক্ষা চালান)। আমার চোখ খোলার জন্য আবার ধন্যবাদ!
আয়নুত স্টাইকু

4
ধন্যবাদ @IonutStaicu আমি ভুলে গেছি উল্লেখ যে লোড হচ্ছে না ওয়ার্ডপ্রেস আপনার পরীক্ষা তোলে অনেক দ্রুততর
gmazzap

6
এটিও উল্লেখ করার মতো যে ডাব্লুপি কোর ইউনিট পরীক্ষার কাঠামোটি সংহতকরণ পরীক্ষা চালানোর জন্য একটি আশ্চর্যজনক সরঞ্জাম, যা ডাব্লুপি নিজেই ভালভাবে সংহত হয়েছে তা নিশ্চিত করার জন্য স্বয়ংক্রিয় পরীক্ষা হবে (যেমন কোনও দুর্ঘটনাজনিত ফাংশন নামের সংঘর্ষ ইত্যাদি নেই)।
জন পি ব্লচ

1
ভাল পয়েন্টের জন্য @ জনপিপ ব্লচ +1 এমনকি ওয়ার্ডপ্রেসে কোনও ফাংশন নামের সংঘাত এড়াতে নেমস্পেস ব্যবহার করা যথেষ্ট হলেও, যেখানে সমস্ত কিছু বিশ্বব্যাপী :) তবে, নিশ্চিত, সংহতকরণ / কার্যকরী পরীক্ষাগুলি একটি জিনিস। আমি এই মুহূর্তে বেহাত + মিনকের সাথে খেলছি তবে আমি এখনও এটি নিয়ে অনুশীলন করছি।
গাজাজ্যাপ

1
ওয়ার্ডপ্রেসের ইউনিটটেষ্ট বনাঞ্চলের "হেলিকপ্টার রাইড" এর জন্য ধন্যবাদ - আমি এখনও সেই মহাকাব্য চিত্রটি হাসছি ;-)
বার্গায়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.