feat(test, e2e) test suit for cypress (#42138)
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
@ -1,41 +0,0 @@
|
||||
/* global cy */
|
||||
|
||||
const locations = {
|
||||
index:
|
||||
'learn/apis-and-microservices/managing-packages-with-npm/' +
|
||||
'how-to-use-package-json-the-core-of-any-node-js-project-or-npm-package'
|
||||
};
|
||||
|
||||
const selectors = {
|
||||
defaultOutput: '.output-text',
|
||||
input: 'input[name="solution"]'
|
||||
};
|
||||
|
||||
const unhandledErrorMessage = 'Something is not quite right';
|
||||
const runningOutput = '// running tests';
|
||||
const finishedOutput = '// tests completed';
|
||||
|
||||
describe('Backend challenge', function () {
|
||||
it('renders', () => {
|
||||
cy.visit(locations.index);
|
||||
|
||||
cy.title().should(
|
||||
'eq',
|
||||
'Managing Packages with Npm - How to Use package.json, the Core of Any' +
|
||||
' Node.js Project or npm Package | Learn | freeCodeCamp.org'
|
||||
);
|
||||
});
|
||||
|
||||
it('does not generate unhandled errors on submission', () => {
|
||||
cy.visit(locations.index);
|
||||
cy.get(selectors.input)
|
||||
.type('https://example.com')
|
||||
.type('{enter}')
|
||||
.then(() => {
|
||||
cy.get(selectors.defaultOutput)
|
||||
.contains(runningOutput)
|
||||
.contains(finishedOutput);
|
||||
cy.contains(unhandledErrorMessage).should('not.exist');
|
||||
});
|
||||
});
|
||||
});
|
@ -1,64 +0,0 @@
|
||||
/* global cy */
|
||||
|
||||
const selectors = {
|
||||
defaultOutput: '.output-text',
|
||||
editor: '.monaco-editor',
|
||||
hotkeys: '.default-layout > div',
|
||||
runTestsButton: 'button:contains("Run the Tests")'
|
||||
};
|
||||
|
||||
const locations = {
|
||||
index:
|
||||
'/learn/responsive-web-design/basic-html-and-html5/' +
|
||||
'say-hello-to-html-elements'
|
||||
};
|
||||
|
||||
const defaultOutput = `
|
||||
/**
|
||||
* Your test output will go here
|
||||
*/`;
|
||||
|
||||
const runningOutput = '// running tests';
|
||||
const finishedOutput = '// tests completed';
|
||||
|
||||
describe('Classic challenge', function () {
|
||||
before(() => {
|
||||
cy.visit(locations.index);
|
||||
});
|
||||
|
||||
it('renders the default output text', () => {
|
||||
cy.title().should(
|
||||
'eq',
|
||||
'Learn Basic HTML and HTML5: Say Hello to HTML Elements |' +
|
||||
' freeCodeCamp.org'
|
||||
);
|
||||
cy.get(selectors.defaultOutput).contains(defaultOutput);
|
||||
});
|
||||
|
||||
it('shows test output when the tests are run', () => {
|
||||
// first wait for the editor to load
|
||||
cy.get(selectors.editor, { timeout: 15000 });
|
||||
cy.get(selectors.runTestsButton)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.get(selectors.defaultOutput)
|
||||
.contains(runningOutput)
|
||||
.contains(finishedOutput);
|
||||
});
|
||||
});
|
||||
|
||||
it('shows test output when the tests are triggered by the keyboard', () => {
|
||||
// first wait for the editor to load
|
||||
cy.get(selectors.editor, {
|
||||
timeout: 15000
|
||||
});
|
||||
cy.get(selectors.hotkeys)
|
||||
.focus()
|
||||
.type('{ctrl}{enter}')
|
||||
.then(() => {
|
||||
cy.get(selectors.defaultOutput)
|
||||
.contains(runningOutput)
|
||||
.contains(finishedOutput);
|
||||
});
|
||||
});
|
||||
});
|
@ -1,52 +0,0 @@
|
||||
/* global cy */
|
||||
|
||||
const projects = {
|
||||
superBlock: 'machine-learning-with-python',
|
||||
block: 'machine-learning-with-python-projects',
|
||||
challenges: [
|
||||
{
|
||||
slug: 'book-recommendation-engine-using-knn',
|
||||
nextChallengeText: 'Linear Regression Health Costs Calculator'
|
||||
},
|
||||
{
|
||||
slug: 'cat-and-dog-image-classifier',
|
||||
nextChallengeText: 'Book Recommendation Engine using KNN'
|
||||
},
|
||||
{
|
||||
slug: 'linear-regression-health-costs-calculator',
|
||||
nextChallengeText: 'Neural Network SMS Text Classifier'
|
||||
},
|
||||
{
|
||||
slug: 'neural-network-sms-text-classifier',
|
||||
nextChallengeText: 'Find the Symmetric Difference'
|
||||
},
|
||||
{
|
||||
slug: 'rock-paper-scissors',
|
||||
nextChallengeText: 'Cat and Dog Image Classifier'
|
||||
}
|
||||
]
|
||||
};
|
||||
describe('project submission', () => {
|
||||
// NOTE: this will fail once challenge tests are added.
|
||||
it('Should be possible to submit Python projects', () => {
|
||||
const { superBlock, block, challenges } = projects;
|
||||
challenges.forEach(({ slug }) => {
|
||||
const url = `/learn/${superBlock}/${block}/${slug}`;
|
||||
cy.visit(url);
|
||||
cy.get('#dynamic-front-end-form')
|
||||
.get('#solution')
|
||||
.type('https://replit.com/@camperbot/python-project#main.py');
|
||||
|
||||
cy.contains("I've completed this challenge").click();
|
||||
cy.contains('Go to next challenge');
|
||||
// clicking on 'Go to next challenge' seems to have caused flakiness, so
|
||||
// it's commented out until we figure out why.
|
||||
// cy.contains('Go to next challenge').click();
|
||||
|
||||
// The next two commands are to confirm that go to next challenge has
|
||||
// moved us to the expected challenge before we loop again.
|
||||
// cy.get('.title-text').should('include.text', nextChallengeText);
|
||||
// cy.url().should('not.have.string', url);
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user