More Related Content Similar to TDD With Typescript - Noam Katzir (20) More from Wix Engineering (7) TDD With Typescript - Noam Katzir13. ▪ Lambdas and closures everywhere
▪ Massive usage of Object literal
▪ Unsafe features like “this”
▪ Weak types
▪ Mutable state
▪ Quick and dirty syndrome
▪ There is no null/undefined safety
Javascript is freestyle
25. //file 1
const schemaDescriptor = {
name: 'noam',
writable: true,
displayName: 'Noam',
baseUrl: 'http://www.wix.com',
fields: []
}
calcSomethingFor(schemaDescriptor);
//file 2
function calcSomethingFor(schema) {
.....
}
Freestyle
Objects
26. //file 1
const schemaDescriptor = {
name: 'noam',
writable: true,
displayName: 'Noam',
baseUrl: 'http://www.wix.com',
fields: []
}
calcSomethingFor(schemaDescriptor);
//file 2
function calcSomethingFor(schema) {
.....
}
//file 1
export type SchemaDescriptor = {
name: string;
writable: boolean;
displayName: string;
baseUrl: string;
filterKey?: FilterField;
fields: SchemaField[];
}
//file 2
const schemaDescriptor: SchemaDescriptor = {
name: 'noam',
writable: true,
displayName: 'Noam',
baseUrl: 'http://www.wix.com',
fields: []
}
calcSomethingFor(schemaDescriptor);
//file 3
function calcSomethingFor(schema: SchemaDescriptor) {
.....
}
Objects
with Types
Freestyle
Objects
27. import {WixCodePage} from '../WixCodePage';
export const factory = component => {
const getIframeContainer = () =>
component.find('[data-hook="wix-code-wrapper"]');
const getWixCodePage = () =>
component.find(WixCodePage);
const isIframeDisplayed = () =>
getIframeContainer().length > 0;
const getHeader = () => component.find('[data-
hook="page-header"]');
return {
getIframeContainer,
isIframeDisplayed,
getWixCodePage,
getHeader
};
};
Freestyle
28. import {WixCodePage} from '../WixCodePage';
export const factory = component => {
const getIframeContainer = () =>
component.find('[data-hook="wix-code-wrapper"]');
const getWixCodePage = () =>
component.find(WixCodePage);
const isIframeDisplayed = () =>
getIframeContainer().length > 0;
const getHeader = () => component.find('[data-
hook="page-header"]');
return {
getIframeContainer,
isIframeDisplayed,
getWixCodePage,
getHeader
};
};
import {WixCodePage} from '../WixCodePage';
export interface PageComposerTestValidator {
getIframeContainer(): ReactWrapper;
getWixCodePage(): ReactWrapper;
isIframeDisplayed(): boolean;
getHeader(): ReactWrapper;
}
class DefaultPageComposerTestValidator implements
PageComposerTestValidator {
constructor(private readonly component: ReactWrapper,
private readonly reactComponent: React.Component) {}
getIframeContainer(): ReactWrapper {
return this.component.find('[data-hook="wix-code-wrapper"]');
}
getWixCodePage(): ReactWrapper {
return this.component.find(reactComponent);
}
isIframeDisplayed(): boolean {
return this.getIframeContainer().length > 0;
}
getHeader(): ReactWrapper {
return this.component.find('[data-hook="page-header"]');
}
}
with TypesFreestyle