get_header doesn't get rendered twice in unit test
-
I’m trying to test the markup in Unit Test and I’ve encountered an issue where
get_header
doesn’t get rendered the second test which causes the tests to break.Here’s how I capture the markup from template
protected function get_view_output_as_dom( $path ) { ob_start(); $this->go_to( $path ); $this->load_template(); $output = ob_get_contents(); ob_end_clean(); error_log( "Noppanit", 3, "/var/tmp/my-errors.log"); error_log( $output, 3, "/var/tmp/my-errors.log"); $html5 = new HTML5(); $dom = $html5->loadHTML($output); return $dom; } /** * Copy-pasta of wp-includes/template-loader.php */ protected function load_template() { do_action( 'template_redirect' ); $template = false; if ( is_404() && $template = get_404_template() ) : elseif ( is_search() && $template = get_search_template() ) : elseif ( is_front_page() && $template = get_front_page_template() ) : elseif ( is_home() && $template = get_home_template() ) : elseif ( is_post_type_archive() && $template = get_post_type_archive_template() ) : elseif ( is_tax() && $template = get_taxonomy_template() ) : elseif ( is_attachment() && $template = get_attachment_template() ) : remove_filter('the_content', 'prepend_attachment'); elseif ( is_single() && $template = get_single_template() ) : elseif ( is_page() && $template = get_page_template() ) : elseif ( is_category() && $template = get_category_template() ) : elseif ( is_tag() && $template = get_tag_template() ) : elseif ( is_author() && $template = get_author_template() ) : elseif ( is_date() && $template = get_date_template() ) : elseif ( is_archive() && $template = get_archive_template() ) : elseif ( is_comments_popup() && $template = get_comments_popup_template() ) : elseif ( is_paged() && $template = get_paged_template() ) : else : $template = get_index_template(); endif; /** * Filter the path of the current template before including it. * * @since 3.0.0 * * @param string $template The path of the template to include. */ if ( $template = apply_filters( 'template_include', $template ) ) include( $template ); return; }
and this is my test
public function test_facebook_open_graph_tags_for_homepage() { $expected_home_tags = array( 'og:title' => $this->blogname, 'og:type' => 'website', 'og:description' => $this->blogdescription, 'og:site_name' => $this->blogname, 'og:url' => home_url( '/' ), ); $dom = $this->get_view_output_as_dom( '/' ); $metas = qp( $dom, 'meta' ); $this->assertMetaTags($expected_home_tags, $metas); } private function assertMetaTags( $expected_tags, $metas ) { $inspector = array(); foreach( $expected_tags as $key => $value ) { foreach( $metas as $meta ) { if( $meta->attr( 'property' ) == $key ) { array_push( $inspector, $key ); $this->assertEquals( $value, $meta->attr( 'content' ) ); } } } if( count( $inspector ) != count( $expected_tags ) ) { var_dump( $inspector ); $this->fail( 'one or more attributes are missing' ); } }
And the second test is doing the same thing but the second test failed because
meta
tag doesn’t get rendered becauseget_header()
doesn’t get rendered. I put the content toerror_log
to see the output and the second test just show the template withoutget_header
andget_footer
contentI’m not sure if I’m missing something obvious.
- The topic ‘get_header doesn't get rendered twice in unit test’ is closed to new replies.