Table Excerpt Include | ||||||||
---|---|---|---|---|---|---|---|---|
|
Table Excerpt Include | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Tabla de contenidos | ||||||
---|---|---|---|---|---|---|
|
Advertencia |
---|
Las gu铆as de desarrollo son un documento que busca facilitar el onboarding y la homogeneidad de los proyectos en la STIC. La STIC podr谩 estudiar los casos excepcionales los cuales ser谩n gestionados a trav茅s de los responsables del proyecto correspondiente y autorizados por el 脕rea de Gobernanza de la STIC. Asimismo cualquier aspecto no recogido en estas gu铆as deber谩 regirse en primera instancia por las gu铆as t茅cnicas correspondientes al esquema nacional de seguridad y esquema nacional de interoperabilidad seg煤n correspondencia y en su defecto a los marcos normativos y de desarrollo software establecidos por la Junta de Andaluc铆a, debiendo ser puesto de manifiesto ante la STIC. La STIC se reserva el derecho a la modificaci贸n de la gu铆a sin previo aviso, tras lo cual, notificar谩 del cambio a los actores implicados para su adopci贸n inmediata seg煤n la planificaci贸n de cada proyecto. En el caso de que alg煤n actor considere conveniente y/o necesario el incumplimiento de alguna de las normas y/o recomendaciones, deber谩 aportar previamente la correspondiente justificaci贸n fehaciente documentada de la soluci贸n alternativa propuesta, as铆 como toda aquella documentaci贸n que le sea requerida por la STIC para proceder a su validaci贸n t茅cnica. Contacto Arquitectura: l-arquitectura.stic@juntadeandalucia.es |
Los cambios en la normativa vendr谩n acompa帽ados de un registro de las modificaciones. De este modo se podr谩 realizar un seguimiento y consultar su evoluci贸n. Orden谩ndose de mas recientes a menos recientes, prestando especial cuidado a las cabeceras de la tablas d贸nde se indican las fechas de entrada en vigor y versi贸n.
Expandir | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
|
En este documento se describir谩n las principales pautas a tener en cuenta a la hora de dise帽ar y ejecutar test en los desarrollos frontales. Importante e
Este apartado pretende compartir algunas configuraciones consideradas de utilidad para una correcta ejecuci贸n de los test.
@open-wc/testing
@types/mocha
@web/test-runner
@web/test-runner-puppeteer
sinon
puppeteer
Bloque de c贸digo | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
mport { esbuildPlugin } from '@web/dev-server-esbuild'; import { puppeteerLauncher } from '@web/test-runner-puppeteer'; import { defaultReporter } from '@web/test-runner'; export default { plugins: [ esbuildPlugin({ ts: true, tsconfig: 'tsconfig.dev.json', // Aseg煤rate de que esbuild use tu tsconfig.json loaders: { '.ts': 'ts', } }), ], browsers: [puppeteerLauncher({ launchOptions: { args: ['--no-sandbox', '--disable-setuid-sandbox'] } })], reporters:[ defaultReporter({ reportTestResults: true, reportTestProgress: true })], nodeResolve: true, preserveSymlinks: true, rootDir: '.', files: ['packages/**/*.test.ts'], mimeTypes: { '**/*.ts': 'js', }, }; |
Bloque de c贸digo | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Importante que los import vengas{ de @open-wc/testing para que tener la m谩xima compatibilidad con lit-elementhtml, LitElement } from "lit"; import { defineCE, expect, fixture, fixtureCleanup, htmlproperty } from "@open-wc/testinglit/decorators.js"; //Librer铆a de MOCK import sinon from "sinon"; //Importamos el componente import { Example } from "../index"; describe("Testing Lit WebComponent ", () =>export class Example extends LitElement{ @property({ type: String, attribute: 'some-attribute'}) public someProperty: string = "default value"; constructor() { let sandbox: sinon.SinonSandbox; super(); //creaci贸n de un sandbox para el mock} beforeconnectedCallback(() => { sandbox = sinonsuper.createSandboxconnectedCallback(); }); //Se restaura el sandbox y se limpia el fixture despu茅s de cada testconsole.debug(`Cargado componente ${this.tagName} `); } afterEach(render(): =>any { return sandbox.restore();html`<h2>componente creado</h2> fixtureCleanup(); <p })id="property-value">${this.someProperty}</p>`; //test de renderizado del componente example-test-component it("should render a web component", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component></example-test-component>`); } } customElements.define('example-test-component', Example); |
Bloque de c贸digo | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Importante que los import vengas de @open-wc/testing para que tener la m谩xima compatibilidad con lit-element
import { defineCE, expect, fixture, fixtureCleanup, html, unsafeStatic} from "@open-wc/testing";
//Importamos el componente
import { Example } from "../index";
describe("Testing Lit WebComponent ", () => {
//Se restaura el sandbox y se limpia el fixture despu茅s de cada test
afterEach(() => {
fixtureCleanup();
});
//test de renderizado del componente example-test-component
it("should render a web component", async () => {
//await fixture espera hasta que se renderice el componente
const el = await fixture< Example >(html`<example-test-component></example-test-component>`);
expect(el).to.exist;
// si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta
expect(el.shadowRoot).to.exist;
});
it("should render a web component with random test tag", async () => {
const tag = defineCE(class extends Example{});
const unsafeTag = unsafeStatic(tag);
//await fixture espera hasta que se renderice el componente
const el = await fixture< Example >(html`<${unsafeTag}></${unsafeTag}>`);
expect(el).to.exist;
// si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta
expect(el.shadowRoot).to.exist;
});
}); |
Advertencia | ||
---|---|---|
| ||
聽 聽 聽 //Cuidado!!!!! este c贸digo genera acoplamiento al html generado por el render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido |
Bloque de c贸digo | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Importante que los import vengas de @open-wc/testing para que tener la m谩xima compatibilidad con lit-element import { defineCE, elementUpdated, expect, fixture, fixtureCleanup, html, unsafeStatic} from "@open-wc/testing"; //Importamos el componente import { Example } from "../index"; describe("Testing Lit WebComponent ", () => { //creaci贸n de un sandbox para el mock before(() => { }); //Se restaura el sandbox y se limpia el fixture despu茅s de cada test afterEach(() => { fixtureCleanup(); }); //test de renderizado del componente example-test-component it("should render a default value of property", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('default value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('default value'); }); it("should render a default value of property in a web component with random test tag", async () => { const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${unsafeTag}></${unsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('default value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('default value'); }); it("should render a initialize value property", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component .someProperty=${'init value'} ></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); }); it("should render a initialize value property in a web component with random test tag", async () => { const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${unsafeTag} .someProperty=${'init value'}></${unsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); }); it("should render a changed value property", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component .someProperty=${'init value'} ></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); el.someProperty = 'new value'; await elementUpdated(el); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('new value'); }); it("should render a changed value property in a web component with random test tag", async () => { const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${unsafeTag} .someProperty=${'init value'}></${unsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); el.someProperty = 'new value'; await elementUpdated(el); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('new value'); }); it("should render a reactive changed value property", async () => { let propertyReactiveBind = 'init value'; //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component .someProperty=${propertyReactiveBind} ></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); propertyReactiveBind = 'new value'; //Tenemos que hacer esto ya que no existe un m茅todo para actualizar la propiedad de forma reactiva a trav茅s del html desde un entorno de test. el.someProperty = propertyReactiveBind; await elementUpdated(el); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('new value'); }); it("should render a reactive changed value property in a web component with random test tag", async () => { let propertyReactiveBind = 'init value'; const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${unsafeTag} .someProperty=${propertyReactiveBind}></${unsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.existequal('init value'); propertyReactiveBind //= si tiene shadowRoot es que es un webcomponent y'new value'; //Tenemos que sehacer haesto renderizadoya deque formano correcta existe un m茅todo para actualizar expect(el.shadowRoot).to.exist; }); it("should render a web component with random test tag", async () => {la propiedad de forma reactiva a trav茅s del html desde un entorno de test. el.someProperty = propertyReactiveBind; const tag = defineCE(Exampleawait elementUpdated(el); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${tag}></${tag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent yexpect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha renderizado de forma correctadefinido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.existequal('new value'); }); }); |
Advertencia | ||
---|---|---|
| ||
聽 聽 聽 //Cuidado!!!!! este c贸digo genera acoplamiento al html generado por el render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad del atributo se renderiza correctamente, no solo que se ha definido |
Bloque de c贸digo | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Importante que los import vengas de @open-wc/testing para que tener la m谩xima compatibilidad con lit-element import { defineCE, elementUpdated, expect, fixture, fixtureCleanup, html, unsafeStatic} from "@open-wc/testing"; //Librer铆a de MOCK import sinon from "sinon"; //Importamos el componente import { Example } from "../index"; describe("Testing Lit WebComponent ", () => { let sandbox: sinon.SinonSandbox; //creaci贸n de un sandbox para el mock before(() => { sandbox = sinon.createSandbox(); }); //Se restaura el sandbox y se limpia el fixture despu茅s de cada test afterEach(() => { sandbox.restore(); fixtureCleanup(); }); //test de renderizado del componente example-test-component it("should render a default value of propertyattribute", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('somePropertysome-attribute')).to.equal('default value').not.exist; expect(el.someProperty).to.equal('default value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('default value'); }); it("should render a default value of propertyattribute in a web component with random test tag", async () => { const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${tagunsafeTag}></${tagunsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('somePropertysome-attribute')).to.equal('default value').not.exist; expect(el.someProperty).to.equal('default value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('default value'); }); it("should render a initialize value propertyattribute", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component .somePropertysome-attribute=${'init value'} ></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('somePropertysome-attribute')).to.equal('init value'); expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); }); it("should render a initialize value propertyattribute in a web component with random test tag", async () => { const tag = defineCE(class extends Example{}); const tagunsafeTag = defineCEunsafeStatic(Exampletag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${tagunsafeTag} .somePropertysome-attribute=${'init value'}></${tagunsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('somePropertysome-attribute')).to.equal('init value'); expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); }); it("should render a changed value propertyattribute", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<example-test-component .somePropertysome-attribute=${'init value'} ></example-test-component>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('somePropertysome-attribute')).to.equal('init value'); expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); el.someProperty =setAttribute('some-attribute', 'new value'); await elementUpdated(el); expect(el.getAttribute('somePropertysome-attribute')).to.equal('new value'); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('new value'); }); it("should render a changed value propertyattribute in a web component with random test tag", async () => { const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${tagunsafeTag} .somePropertysome-attribute=${'init value'}></${tagunsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('somePropertysome-attribute')).to.equal('init value'); expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); el.someProperty =setAttribute('some-attribute', 'new value'); await elementUpdated(el); expect(el.getAttribute('somePropertysome-attribute')).to.equal('new value'); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('new value'); });('new value'); }); it("should render a reactive changed value attribute", async () => { let propertyReactiveBind = 'init value'; //await fixture espera hasta que se renderice el componente it("should render aconst reactiveel changed= valueawait property",fixture< asyncExample >() => { html`<example-test-component some-attribute=${propertyReactiveBind} ></example-test-component>`); expect(el).to.exist; let propertyReactiveBind = 'init value'; //await fixture espera hasta // si tiene shadowRoot es que es un webcomponent y que se ha renderizado rendericede elforma componentecorrecta const el = await fixture< Example >(html`<example-test-component .someProperty=${propertyReactiveBind} ></example-test-component>`expect(el.shadowRoot).to.exist; expect(el.getAttribute('some-attribute')).to.equal('init value'); expect(el.someProperty).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('someProperty')).to.equal('init value');.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.someProperty.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor depropertyReactiveBind = 'new value'; //Tenemos que hacer esto ya que no existe un m茅todo para actualizar la propiedad sede renderizaforma correctamente,reactiva no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")).to.equal('init value');a trav茅s del html desde un entorno de test. propertyReactiveBind = 'new value' el.setAttribute('some-attribute', propertyReactiveBind); await elementUpdated(el); expect(el.getAttribute('somePropertysome-attribute')).to.equal('new value'); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('new value'); }); it("should render a reactive changed value propertyattribute in a web component with random test tag", async () => { let propertyReactiveBind = 'init value'; const tag = defineCE(class extends Example{}); const unsafeTag = unsafeStatic(tag); //await fixture espera hasta que se renderice el componente const el = await fixture< Example >(html`<${tagunsafeTag} .somePropertysome-attribute=${propertyReactiveBind}></${tagunsafeTag}>`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; expect(el.getAttribute('someProperty'some-attribute')).to.equal('init value'); expect(el.someProperty).to.equal('init value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value")?.textContent).to.equal('init value'); propertyReactiveBind = 'new value'; //Tenemos que hacer esto ya que no existe un m茅todo para actualizar la propiedad de forma reactiva a trav茅s del html desde un entorno de test. el.setAttribute('some-attribute', propertyReactiveBind); await elementUpdated(el); expect(el.getAttribute('somePropertysome-attribute')).to.equal('new value'); expect(el.someProperty).to.equal('new value'); //Cuidado!!!!! este c贸digo genera acoplamiento al render del componente, no es recomendable ya que los test deben ser funcionales. Nos sirve para testear que el valor de la propiedad se renderiza correctamente, no solo que se ha definido expect(el.shadowRoot?.getElementById("property-value"))?.textContent).to.equal('new value'); }); }); |
Bloque de c贸digo | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Importante que los import vengas de @open-wc/testing para que tener la m谩xima compatibilidad con lit-element import { defineCE, expect, fixture, fixtureCleanup, html, unsafeStatic } from "@open-wc/testing"; import { LitElement } from "lit"; //Librer铆a de MOCK import sinon from "sinon"; //Creaci贸n de un componente LitElement din谩mico const customElementWithProperties = defineCE( class extends LitElement{ static properties = { someProperty: { type: String }, }; constructor() { super(); } connectedCallback() { super.connectedCallback(); console.debug(`Cargado componente ${this.tagName} `); } render(): any { return html`<h2>componente creado STAND-ALONE</h2>`; } } ); //Obtenci贸n del tag del componente para su renderizado din谩mico const customElementWithPropertiesTag = unsafeStatic(customElementWithProperties); //Definici贸n de la suit describe("Testing Lit WebComponent ", () => { let sandbox: sinon.SinonSandbox; //creaci贸n de un sandbox para el mock before(() => { sandbox = sinon.createSandbox(); }); //Se restaura el sandbox y se limpia el fixture despu茅s de cada test afterEach(() => { sandbox.restore(); fixtureCleanup(); }); //test de renderizado del componente customizado it("should render a web component", async () => { //await fixture espera hasta que se renderice el componente const el = await fixture< LitElement >(html`<${customElementWithPropertiesTag}></${customElementWithPropertiesTag}`); expect(el).to.exist; // si tiene shadowRoot es que es un webcomponent y que se ha renderizado de forma correcta expect(el.shadowRoot).to.exist; }); }); |
Table Excerpt Include | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Table Excerpt Include | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Table Excerpt Include | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|