yoastseo-dep
Version:
Yoast clientside page analysis
266 lines (223 loc) • 12.2 kB
JavaScript
import EnglishResearcher from "../../../src/languageProcessing/languages/en/Researcher";
import Assessor from "../../../src/scoring/productPages/seoAssessor.js";
import Paper from "../../../src/values/Paper.js";
import getResults from "../../specHelpers/getAssessorResults";
import { checkAssessmentAvailability } from "../../specHelpers/scoring/seoAssessorTests";
const mockPaper = new Paper( "" );
const assessor = new Assessor( new EnglishResearcher( mockPaper ), {
assessVariants: true,
introductionKeyphraseUrlTitle: "https://yoast.com/1",
introductionKeyphraseCTAUrl: "https://yoast.com/2",
keyphraseLengthUrlTitle: "https://yoast.com/3",
keyphraseLengthCTAUrl: "https://yoast.com/4",
keyphraseDensityUrlTitle: "https://yoast.com/5",
keyphraseDensityCTAUrl: "https://yoast.com/6",
metaDescriptionKeyphraseUrlTitle: "https://yoast.com/7",
metaDescriptionKeyphraseCTAUrl: "https://yoast.com/8",
metaDescriptionLengthUrlTitle: "https://yoast.com/9",
metaDescriptionLengthCTAUrl: "https://yoast.com/10",
subheadingsKeyphraseUrlTitle: "https://yoast.com/11",
subheadingsKeyphraseCTAUrl: "https://yoast.com/12",
textCompetingLinksUrlTitle: "https://yoast.com/13",
textCompetingLinksCTAUrl: "https://yoast.com/14",
textLengthUrlTitle: "https://yoast.com/15",
textLengthCTAUrl: "https://yoast.com/16",
titleKeyphraseUrlTitle: "https://yoast.com/17",
titleKeyphraseCTAUrl: "https://yoast.com/18",
titleWidthUrlTitle: "https://yoast.com/19",
titleWidthCTAUrl: "https://yoast.com/20",
urlKeyphraseUrlTitle: "https://yoast.com/21",
urlKeyphraseCTAUrl: "https://yoast.com/22",
functionWordsInKeyphraseUrlTitle: "https://yoast.com/23",
functionWordsInKeyphraseCTAUrl: "https://yoast.com/24",
singleH1UrlTitle: "https://yoast.com/25",
singleH1CTAUrl: "https://yoast.com/26",
imageCountUrlTitle: "https://yoast.com/27",
imageCountCTAUrl: "https://yoast.com/28",
imageKeyphraseUrlTitle: "https://yoast.com/29",
imageKeyphraseCTAUrl: "https://yoast.com/30",
imageAltTagsUrlTitle: "https://yoast.com/31",
imageAltTagsCTAUrl: "https://yoast.com/32",
keyphraseDistributionUrlTitle: "https://yoast.com/33",
keyphraseDistributionCTAUrl: "https://yoast.com/34",
productIdentifierUrlTitle: "https://yoast.com/35",
productIdentifierCTAUrl: "https://yoast.com/36",
productSKUUrlTitle: "https://yoast.com/37",
productSKUCTAUrl: "https://yoast.com/38",
} );
describe( "running assessments in the product page SEO assessor", function() {
checkAssessmentAvailability( assessor, true );
it( "runs the productSKUAssessments when applicable (canRetrieveVariantSkus is true) that require the SKU to be detectable, " +
"and that shouldn't be applicable if the product has variants and we don't want to assess variants", function() {
const customData = {
canRetrieveGlobalSku: true,
canRetrieveVariantSkus: true,
hasVariants: true,
productType: "variable",
};
assessor.assess( new Paper( "", { customData } ) );
const AssessmentResults = assessor.getValidResults();
const assessments = getResults( AssessmentResults );
expect( assessments ).toContain( "productSKU" );
} );
it( "runs the productIdentifierAssessment when it is applicable (it has variants and assessVariants is True)", function() {
const customData = {
hasVariants: true,
productType: "variable",
};
assessor.assess( new Paper( "", { customData } ) );
const AssessmentResults = assessor.getValidResults();
const assessments = getResults( AssessmentResults );
expect( assessments ).toContain( "productIdentifier" );
} );
} );
describe( "has configuration overrides", () => {
test( "IntroductionKeywordAssessment", () => {
const assessment = assessor.getAssessment( "introductionKeyword" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/1' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/2' target='_blank'>" );
} );
test( "KeyphraseLengthAssessment", () => {
const assessment = assessor.getAssessment( "keyphraseLength" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.parameters.recommendedMinimum ).toBe( 4 );
expect( assessment._config.parameters.recommendedMaximum ).toBe( 6 );
expect( assessment._config.parameters.acceptableMaximum ).toBe( 8 );
expect( assessment._config.parameters.acceptableMinimum ).toBe( 2 );
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/3' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/4' target='_blank'>" );
} );
test( "KeywordDensityAssessment", () => {
const assessment = assessor.getAssessment( "keyphraseDensity" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/5' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/6' target='_blank'>" );
} );
test( "MetaDescriptionKeywordAssessment", () => {
const assessment = assessor.getAssessment( "metaDescriptionKeyword" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/7' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/8' target='_blank'>" );
} );
test( "MetaDescriptionLengthAssessment", () => {
const assessment = assessor.getAssessment( "metaDescriptionLength" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/9' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/10' target='_blank'>" );
} );
test( "SubheadingsKeyword", () => {
const assessment = assessor.getAssessment( "subheadingsKeyword" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/11' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/12' target='_blank'>" );
} );
test( "TextCompetingLinksAssessment", () => {
const assessment = assessor.getAssessment( "textCompetingLinks" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/13' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/14' target='_blank'>" );
} );
test( "TextLengthAssessment", () => {
const assessment = assessor.getAssessment( "textLength" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.recommendedMinimum ).toBe( 200 );
expect( assessment._config.slightlyBelowMinimum ).toBe( 150 );
expect( assessment._config.belowMinimum ).toBe( 100 );
expect( assessment._config.veryFarBelowMinimum ).toBe( 50 );
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/15' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/16' target='_blank'>" );
} );
test( "KeyphraseInSEOTitleAssessment", () => {
const assessment = assessor.getAssessment( "keyphraseInSEOTitle" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/17' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/18' target='_blank'>" );
} );
test( "PageTitleWidthAssesment", () => {
const assessment = assessor.getAssessment( "titleWidth" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.scores ).toBeDefined();
expect( assessment._config.scores.widthTooShort ).toBe( 9 );
expect( assessment._allowShortTitle ).toBe( true );
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/19' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/20' target='_blank'>" );
} );
test( "SlugKeywordAssessment", () => {
const assessment = assessor.getAssessment( "slugKeyword" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/21' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/22' target='_blank'>" );
} );
test( "FunctionWordsInKeyphrase", () => {
const assessment = assessor.getAssessment( "functionWordsInKeyphrase" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/23' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/24' target='_blank'>" );
} );
test( "SingleH1Assessment", () => {
const assessment = assessor.getAssessment( "singleH1" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/25' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/26' target='_blank'>" );
} );
test( "ImageCount", () => {
const assessment = assessor.getAssessment( "images" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.scores.okay ).toBe( 6 );
expect( assessment._config.recommendedCount ).toBe( 4 );
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/27' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/28' target='_blank'>" );
} );
test( "ImageKeyphrase", () => {
const assessment = assessor.getAssessment( "imageKeyphrase" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/29' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/30' target='_blank'>" );
} );
test( "ImageAltTags", () => {
const assessment = assessor.getAssessment( "imageAltTags" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/31' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/32' target='_blank'>" );
} );
test( "KeyphraseDistribution", () => {
const assessment = assessor.getAssessment( "keyphraseDistribution" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/33' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/34' target='_blank'>" );
} );
test( "ProductIdentifierAssessment", () => {
const assessment = assessor.getAssessment( "productIdentifier" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.assessVariants ).toBe( true );
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/35' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/36' target='_blank'>" );
} );
test( "ProductSKUAssessment", () => {
const assessment = assessor.getAssessment( "productSKU" );
expect( assessment ).toBeDefined();
expect( assessment._config ).toBeDefined();
expect( assessment._config.assessVariants ).toBe( true );
expect( assessment._config.urlTitle ).toBe( "<a href='https://yoast.com/37' target='_blank'>" );
expect( assessment._config.urlCallToAction ).toBe( "<a href='https://yoast.com/38' target='_blank'>" );
} );
} );