mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-12-20 17:42:59 +00:00
548e94da98
Added to MediaWiki core last year with I9fca9fdf9b7623b1. This fixes a confusing assertion in page-issues/index.test.js, where for "insertBannersOrNotice()" it was asserting that the HTML contain "⧼skin-minerva-issue-learn-more⧽", where the ⧼ character indicates the message is not found (i.e. an error). The test had to be written this way in order to pass, because the skins.minerva.scripts module was not actually loaded, and thus its templates and messages are not present either. This lack was filled in by index.js for mw.templates, but not mw.messages. By adopting private require(), these workarounds can all be removed. == Motivation == In change I3a4024ccf90e505581, I'm working on improving the testrunner config to enforce uselang=qqx on all tests. This is passing except for GrowthExperiments and Minerva, both of which have the above workarounds in place that caused a message to be undefined, and then kept in the assertion expectation. When using uselang=qqx, values are returned as (key) instead of ⧼key⧽, which exposes these message existence errors. By removing this workaround, the test will simply import the module in the test as normal, thus the messages will exist, and thus it will expect (key), and thus it will continue to pass even after enforcing uselang=qqx. Change-Id: Ib68f45d93a7054ed8bd35fc5644e2852f2f90248
53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
( function () {
|
|
|
|
const AB = require( 'skins.minerva.scripts/AB.js' );
|
|
const defaultConfig = {
|
|
testName: 'WME.MinervaABTest',
|
|
samplingRate: 0.5,
|
|
sessionId: mw.user.generateRandomSessionId()
|
|
};
|
|
|
|
QUnit.module( 'Minerva AB-test' );
|
|
|
|
QUnit.test( 'Bucketing test', ( assert ) => {
|
|
const userBuckets = {
|
|
unsampled: 0,
|
|
control: 0,
|
|
treatment: 0
|
|
};
|
|
const maxUsers = 1000;
|
|
|
|
for ( let i = 0; i < maxUsers; i++ ) {
|
|
const config = Object.assign( {}, defaultConfig, {
|
|
sessionId: mw.user.generateRandomSessionId()
|
|
} );
|
|
const bucketingTest = new AB( config );
|
|
if ( bucketingTest.isControl() ) {
|
|
++userBuckets.control;
|
|
} else if ( bucketingTest.isTreatment() ) {
|
|
++userBuckets.treatment;
|
|
} else if ( !bucketingTest.isSampled() ) {
|
|
++userBuckets.unsampled;
|
|
} else {
|
|
throw new Error( 'Unknown bucket!' );
|
|
}
|
|
}
|
|
|
|
assert.strictEqual(
|
|
( userBuckets.unsampled / maxUsers > 0.3 ) &&
|
|
( userBuckets.unsampled / maxUsers < 0.7 ),
|
|
true, 'test unsampled group is about 50% (' + userBuckets.unsampled / 10 + '%)' );
|
|
|
|
assert.strictEqual(
|
|
( userBuckets.control / maxUsers > 0.1 ) &&
|
|
( userBuckets.control / maxUsers < 0.4 ),
|
|
true, 'test control group is about 25% (' + userBuckets.control / 10 + '%)' );
|
|
|
|
assert.strictEqual(
|
|
( userBuckets.treatment / maxUsers > 0.1 ) &&
|
|
( userBuckets.treatment / maxUsers < 0.4 ),
|
|
true, 'test new treatment group is about 25% (' + userBuckets.treatment / 10 + '%)' );
|
|
} );
|
|
|
|
}() );
|