0

I am new in wordpress developement, I have my own custom wordpress plugin which allows admin to click multiple author and save all meta tag in the database on post. It works fine. But i want to generate test case for that. I installed phpunit but I don't know how to write test case.

public function testOne()
{
    $this->factory->post->create();
}

I tried this but not understand how it works.

1
  • you could start here Commented Aug 14, 2017 at 21:14

2 Answers 2

1

It's not difficult but it's definitely not trivial. You'll need to set up a test Wordpress database just for PHPUnit to run tests

I found these guides really useful: https://codesymphony.co/writing-wordpress-plugin-unit-tests/

https://engineering.hmn.md/guides/writing-code/writing-tests/

In order to get the files that PHPUnit needs to set up a WordPress testing environment, I had to get a new WordPress directory:

https://core.trac.wordpress.org/browser/trunk?order=name

And I was stymied for a while by MySQLi failing as soon as my unit tests started, but fixed it with a setting change after reading this:

https://core.trac.wordpress.org/ticket/39327

And now I can actually fix the bugs that the Unit Testing found :).

Sign up to request clarification or add additional context in comments.

Comments

0

First of all, you should use the WordPress modules for Codeception, which includes the PHPunit WPTestCase and many other tools.

There are two basic approaches to testing something like this in WordPress:

You can test it with a browser. This is called an acceptance test. You list all the actions that prove the concept you are testing, and you run a browser [or browser simulator] to do the task step by step. You can look into the database for the artifacts you expect to see as a result, and prove it happens correctly. In your case, you might want to setup some posts, click the multiple authors, and then check the database for the meta tags you expect. It might look something like:

$I = /*am a */ new AcceptanceTester($scenario);
$I->loginAsAdmin();
$I->amOnPage("/wp-admin/post-new.php");
$I->fillField('#content', "lorum ipsum");
$I->click('#publish');

The other approach is to encapsulate your action in an OOP class, and test it using the WPUnit test tools. Codeception uses the same PHPUnit library the WordPress core teams uses, plus a bunch of other tools. The WPUnit approach loads a database into memory, and can do things like setup dummy posts for your plugin to work on. So in your case, you might have a class:

class SystemActionSaveMetaTags{

    public function doSaveMetaTags()

}

You might have a test called

itShouldSaveMetaTags(){
    $id = wp_insert_post();     
    $SystemActionSaveMetaTags = new SystemActionSaveMetaTags;
    $SystemActionSaveMetaTags->doSaveMetaTags($id);
    $this->assertTrue($this->checkForCorrectMetaTags($id));
}

Here is a tutorial on the subject, as it relates to WordPress: https://wp-bdd.com/wp-codeception-tutorial/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.