home app fragment

This commit is contained in:
ScriptedAlchemy 2024-07-21 23:32:16 +08:00
parent 1b33835b14
commit 51f0f6e5c3
10 changed files with 1054 additions and 320 deletions

View file

@ -1,144 +0,0 @@
import { getH1, getH3 } from "../support/app.po";
describe("3000-home/", () => {
beforeEach(() => cy.visit("/"));
describe("Warmup Next", () => {
xit("warms pages concurrently", () => {
const urls = [
"/shop",
"/checkout",
"/checkout/test-title",
"/checkout/test-check-button",
"/api/test",
];
urls.forEach((url) => {
cy.request(url); // This makes a GET request, not a full page visit
});
});
});
describe("Welcome message", () => {
it("should display welcome message", () => {
getH1().contains("This is SPA combined");
});
});
describe("Image checks", () => {
xit("should check that the home-webpack-png and shop-webpack-png images are not 404", () => {
// Get the src attribute of the home-webpack-png image
cy.debug()
.get("img.home-webpack-png")
.invoke("attr", "src")
.then((src) => {
cy.log(src);
cy.request(src).its("status").should("eq", 200);
});
// Get the src attribute of the shop-webpack-png image
cy.get("img.shop-webpack-png")
.invoke("attr", "src")
.then((src) => {
// Send a GET request to the src URL
cy.request(src).its("status").should("eq", 200);
});
});
});
describe("Routing checks", () => {
it("check that clicking back and forwards in client side routeing still renders the content correctly", () => {
cy.visit("/shop");
cy.wait(3000);
cy.url().should("include", "/shop");
getH1().contains("Shop Page");
//eslint-disable-next-line
cy.wait(3000);
cy.get(".home-menu-link").contains("Home 3000");
cy.get(".home-menu-link").click();
cy.wait(2000);
cy.url().should("include", "/");
cy.wait(700);
getH1().contains("This is SPA combined");
});
});
describe("3000-home/checkout", () => {
beforeEach(() => {
cy.visit("/checkout");
cy.visit("/");
cy.visit("/checkout");
});
describe("Welcome message", () => {
it("should display welcome message", () => {
getH1().contains("checkout page");
});
});
describe("Tag checks", () => {
it("should check that a .description + pre tag exists", () => {
cy.get(".description").should("exist");
cy.get("main pre").should("exist");
});
});
describe("3000-home/checkout/test-title", () => {
beforeEach(() => cy.visit("/checkout/test-title"));
it("should display welcome message", () => {
getH3().contains("This title came");
});
});
describe("3000-home/checkout/test-check-button", () => {
beforeEach(() => cy.visit("/checkout/test-check-button"));
it("should display welcome message", () => {
cy.get("button").contains("Button");
});
});
});
describe("3000-home/shop", () => {
beforeEach(() => cy.visit("/shop"));
describe("Welcome message", () => {
it("should display welcome message", () => {
getH1().contains("Shop Page");
});
});
describe("Image checks", () => {
xit("should check that shop-webpack-png images are not 404", () => {
// Get the src attribute of the shop-webpack-png image
cy.get("img.shop-webpack-png")
.invoke("attr", "src")
.then((src) => {
// Send a GET request to the src URL
cy.request(src).its("status").should("eq", 200);
});
});
it("should check that shop-webpack-png images are not 404 between route clicks", () => {
cy.visit("/");
cy.visit("/shop");
cy.url().should("include", "/shop");
getH1().contains("Shop Page");
cy.get(".home-menu-link").click();
//eslint-disable-next-line
cy.wait(2999);
cy.get("img.shop-webpack-png")
.invoke("attr", "src")
.then((src) => {
// Send a GET request to the src URL
cy.request(src).its("status").should("eq", 200);
});
});
});
describe("Tag checks", () => {
it("should check that a .description + pre tag exists", () => {
cy.get(".description + pre").should("exist");
});
});
});
});

View file

@ -1,5 +0,0 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View file

@ -1,3 +0,0 @@
export const getH1 = () => cy.get("h1");
export const getH2 = () => cy.get("h2");
export const getH3 = () => cy.get("h3");

View file

@ -1,35 +0,0 @@
/// <reference types="cypress" />
// ***********************************************
// This example commands.ts shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace Cypress {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
interface Chainable<Subject> {
login(email: string, password: string): void;
}
}
// -- This is a parent command --
Cypress.Commands.add("login", (email, password) => {
console.log("Custom command example: Login", email, password);
});
//
// -- This is a child command --
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })

View file

@ -1,17 +0,0 @@
// ***********************************************************
// This example support/e2e.ts is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.ts using ES2015 syntax:
import "./commands";

View file

@ -1,20 +0,0 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"allowJs": true,
"outDir": "../../dist/out-tsc",
"module": "commonjs",
"types": ["cypress", "node"],
"sourceMap": false
},
"include": [
"**/*.ts",
"**/*.js",
"../cypress.config.ts",
"../**/*.cy.ts",
"../**/*.cy.tsx",
"../**/*.cy.js",
"../**/*.cy.jsx",
"../**/*.d.ts"
]
}

View file

@ -1,63 +1,5 @@
const { withNx } = require("@nx/next/plugins/with-nx");
const NextFederationPlugin = require("@module-federation/nextjs-mf");
/**
* @type {import('@nx/next/plugins/with-nx').WithNxOptions}
**/
const nextConfig = {
nx: {
// Set this to true if you would like to to use SVGR
// See: https://github.com/gregberge/svgr
svgr: false,
},
webpack(config, options) {
const { isServer } = options;
config.watchOptions = {
ignored: ["**/node_modules/**", "**/@mf-types/**"],
};
// used for testing build output snapshots
const remotes = {
checkout: `checkout@http://localhost:3002/_next/static/${
isServer ? "ssr" : "chunks"
}/remoteEntry.js`,
home_app: `home_app@http://localhost:3000/_next/static/${
isServer ? "ssr" : "chunks"
}/remoteEntry.js`,
shop: `shop@http://localhost:3001/_next/static/${
isServer ? "ssr" : "chunks"
}/remoteEntry.js`,
};
config.plugins.push(
new NextFederationPlugin({
name: "home_app",
filename: "static/chunks/remoteEntry.js",
remotes: {
shop: remotes.shop,
checkout: remotes.checkout,
},
exposes: {
"./SharedNav": "./components/SharedNav",
"./menu": "./components/menu",
},
shared: {
"lodash/": {},
antd: {
requiredVersion: "5.19.1",
version: "5.19.1",
},
"@ant-design/": {
singleton: true,
},
},
extraOptions: {
debug: false,
exposePages: true,
enableImageLoaderFix: true,
enableUrlLoaderFix: true,
},
}),
);
config.plugins.push({
name: "xxx",
apply(compiler) {
@ -68,4 +10,4 @@ const nextConfig = {
},
};
module.exports = withNx(nextConfig);
module.exports = nextConfig;

View file

@ -1,19 +1,20 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "es2017",
"jsx": "preserve",
"module": "esnext",
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true
},
"include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "next-env.d.ts"],
"exclude": ["node_modules", "jest.config.ts"]
"include": ["next-env.d.ts", "environment.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}

File diff suppressed because it is too large Load diff

View file

@ -3,3 +3,4 @@ packages:
- 'bench/*'
- 'packages/next-swc/crates/next-core/js'
- 'examples/next-css'
- 'examples/federation-single-app'