(Ce cas d'utilisation est un exemple du principe de substitution de Liskov). Cela permet par exemple de convertir une saisie dans un formulaire et de … Rien ne se passera si aucun changement n'est nécessaire. On retrouve ce cas lorsqu'on essaie de changer une propriété immuable : Object.defineProperty lancera une exception pour tout changement de la propriété qui serait réellement un changement. For the sake of simplicity, no testing framework is used below. Dans ces documents, on peut voir que l'algorithme d'égalité stricte est un sous-ensemble de l'algorithme d'égalité abstraite (exception faite de la vérification du type) car 11.9.6.2–7 correspond exactement à 11.9.3.1.a–f. Fakes and stubs have their place; I really like using fakes for things like loggers or other simple, fire-and-forget type dependencies. A spyis a test double which allows the checking of effects without affecting the behavior of the target function. Si le scénario d'utilisation ne nécessite pas ce comportement, il est conseillé d'utiliser ===. Test Doubles have 3 main purposes. The stub in this case just returns the promise directly. Mocking frameworks, therefore, often have APIs that require a setup step before things are executed. github.com . 1 Share - insert link in comment blog . JS.do Online JavaScript Editor "Edit your code online. Although test doubles come in many flavors (Gerard Meszaros introduced five types in this article), people tend to use term Mock to refer to different kinds of test doubles. Une fois converties (la conversion peut s'effectuer pour l'une ou les deux valeurs), la comparaison finale est la même que celle effectuée par ===. : Le seul cas de figure pour lequel on a (x !== x) qui renvoie true est lorsque x vaut NaN.). If you spot an answer somewhere online, we’ll give you a refund. L'égalité de valeurs répond à un dernier cas d'utilisation : savoir si deux valeurs sont fonctionnellement identiques pour tout contexte. These premium questions are included in this pre-built test and can be added to any multi-skill test. Use //# instead, SyntaxError: a declaration in the head of a for-of loop can't have an initializer, SyntaxError: applying the 'delete' operator to an unqualified name is deprecated, SyntaxError: for-in loop head declarations may not have initializers, SyntaxError: function statement requires a name, SyntaxError: identifier starts immediately after numeric literal, SyntaxError: invalid regular expression flag "x", SyntaxError: missing ) after argument list, SyntaxError: missing = in const declaration, SyntaxError: missing ] after element list, SyntaxError: missing name after . C'est la méthode la plus rapide. Certains développeurs considèrent que ce n'est jamais une bonne idée d'utiliser l'égalilté faible. Mais si v vaut +0, Number.NEGATIVE_ZERO n'aurait plus la même valeur immuable. ES5 décrit également, dans la section 9.12 sur l'algorithme SameValue, l'opération utilisée en interne par le moteur JavaScript. A test doubleis a replacement for a function used during a test. Last modified: Mar 12, 2020, by MDN contributors. Sujet résolu. Javascript Injection is one of the possible attacks against websites, as Javascript is one of the most widely used technologies for the websites. testdouble.js is an opinionated, carefully-designed test double library maintained by, oddly enough, a software agency that’s also named Test Double. This kind of modification can come in the form of stubs, mocks, or generally: “test doubles.” There are some great libraries and abstractions for mocking your JavaScript modules during tests. To ensure it’s easy to understand what is being discussed, here’s a quick overview of the terminology used. Cependant, ce n'est pas le cas et on a bien Object.is(NaN,NaN) qui vaut true. Les événements sont des actions de l'utilisateur, qui vont pouvoir donner lieu à une interactivité. Aucune des valeurs n'est convertie implicitement en une autre valeur avant que la comparaison soit effectuée. Dans des cas d'utilisation où on a besoin d'effectuer de la méta-programmation, notamment pour imiter certaines caractéristiques de Object.defineProperty. Pour tous les autres cas, un objet ne sera jamais approximativement égal à undefined ou à null. A stubis a test double which replaces the target function’s behavior with something else, su… We recommend requiring the library in a test helper and setting it globally forconvenience to the shorthand td: (You may need to configure your linter to ignore the td global.Instructions:eslint,standard.) Si on utilise Object.is et qu'on ne souhaite pas gérer les cas aux limites autour de zéro, cela peut avoir des effet indésirés. Une boucle simple qui incrémente un indice et accède aux éléments successifs par cet indice. After opening Test Explorer (choose Test > Windows > Test Explorer), Visual Studio discovers and displays tests. The httpbinUuid function above. L'égalité faible est symétrique : A == B aura toujours la même signification que B == A pour toute valeur de A et B. Les méthodes push() et unshift ajoutent des éléments respectivement en fin et en début de tableau.. Les méthodes pop() et shift() suppriment respectivement le dernier et le premier élément du tableau.. La concaténation de tableaux. Déposer ou rechercher un code source Javascript. Pour des objets non primitifs, x et y qui ont la même structure mais qui sont des objets distincs, chacune des opérations présentées ci-avant sera évaluée à false. Le test d'égalité stricte considère que NaN est différent de toutes les valeurs, y compris lui-même. This lets you inject test doubles as dependencies directly through the Node.js API. Partage. Whichever test double makes you feel warm and fuzzy about shitting the final product. It verifies that we did actuall call the uuid function as well as makes sure that our systemUnderTest called it correctly without any arguments. Selon ECMAScript, au sens de l'égalité faible, tous les objets sont différents de undefined et de null. It can run tests on 3rd party frameworks like BrowserStack and supports every possible JS framework you could imagine. En revanche, si on souhaite effectivement comparer -0 et +0, c'est la méthode à adopter. A test spy records its calls for later inspection. If you practice test-driven development, testdouble.js was designed to promote terse, clear, and easy-to-understand tests. Web Toolkit Online works only in your browser, your data are secured | Privacy Policy | Contact La comparaison donnée par === est décrite dans la section 11.9.6 sur l'algorithme d'égalité stricte (Strict Equality Algorithm). (N.B. They return pre-programmed values and provide a way to pass a system under test input indirectly. JavaScript fournit trois opérations permettant de comparer des valeurs : Ces trois opérations sont associées à quatre algorithmes d'égalité (depuis ES2015) : Selon la comparaison qu'on souhaite effectuer, on choisira une de ces opérations. TestDome offers a premium questions library with 1000+ unique, hand-crafted questions whose answers can’t be found online. Say hello@testdouble.com. Rather than interact with an API to generate a “uuid” we instead use an in memory value. Ajouter/supprimer des éléments au tableau. Le résultat d'une comparaison utilisant l'égalité stricte est plus simple à appréhender et à prédire, de plus il n'y a aucune conversion implicite ce qui rend le test plus rapide. The Complete JavaScript Course 2020: Build Real Projects (Udemy) We’d just like to begin by saying that this is the best JavaScript tutorial and course you will find online. Misunderstanding and mixing test doubles implementation may influence test design and increase fragility of tests, standing on our way to seamless refactorings. La version ES5 date de 2009. No real logic, it just returns a canned response. In our example above a fake function may just resolve to a string given its constructor. testdouble.js — A minimal test double library for TDD with JavaScript. These are the definitions for Sinon.js, and they can be slightly different elsewhere. It mimics the functionality of something, without being that something. The unit test options will take preference over the settings for individual files. Creating test-doubles with Sinon From the course: JavaScript: Test-Driven Development (ES6) 2h 20m 33s Released on November 21, 2019 On utilise la même égalité que l'égalité de valeur et on considère que +0 et -0 sont égaux. A test double is an object or function that behaves like a real piece of code, but is, instead, solely for a test. // Les deux assertions qui suivent sont fausses. It can refer to any of the three types mentioned below. En effet, cela évite d'avoir à traiter des cas plus complexes où il faudrait gérer les signes des zéros dans les différentes comparaisons. i18n_files_file_alt Ex_Files_JavaScript_Test_Driven_Dev.zip (349091922) Download the exercise files for this course. A very simple, zero-config test runner for Node.js JavaScript 83 17 Type: All Select type. Note. La comparaison d'égalité est effectuée comme suit pour des opérandes de différents types : Dans le tableau ci-dessus, l'expression ToNumber(A) correspond à une tentative de convertir l'argument en un nombre avant la comparaison. En ce qui concerne les nombres, il y a deux cas aux limites à considérer. Le premier cas concerne le nombre zéro positif ou négatif. La syntaxe d'un gestionnaire d'événement est la suiva… What’s the interface we’re trying to create test doubles for? The Jest testing framework has great mocking capabilities built-in for functions as well as entire modules. If something were to change and systemUnderTest started passing arguments to its uuid function the test would fail right when it was called. ES6 (ECMAScript 2015) permet d'utiliser cet algorithme grâce à la méthode Object.is. THE WORLD'S LARGEST WEB DEVELOPER SITE HTML CSS JAVASCRIPT SQL PYTHON PHP BOOTSTRAP HOW TO W3.CSS JQUERY JAVA MORE SHOP CERTIFICATES REFERENCES EXERCISES × × HTML HTML Tag … A test double is an object or function that behaves like a real piece of code, but is, instead, solely for a test. Selon votre approche et votre problème, une de ces égalités se prêtera mieux à la résolution. The system under test is just another function that takes a function as an argument. Selon ES5, la comparaison effectuée par == est décrite dans la section 11.9.3 sur l'algorithme d'égalité abstraite (Abstract Equality Algorithm). If tests are not showing initially, then rebuild the project to refresh the list. Ce test d'égalité stricte est presque toujours la meilleure des opérations à considérer pour ces tests. Le format utilisé pour représenter les chaînes de caractères en JavaScript utilise un seul codet sur 16 bits pour représenter la plupart des caractères communs. are deprecated, SyntaxError: "use strict" not allowed in function with "x" parameter, SyntaxError: "x" is a reserved identifier, SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. L'événement par excellence est le clic de souris, car c'est le seul que le HTML gère. Ce sujet est fermé. Javascript > Tester l'exécution d'un code JavaScript Liste des forums; Rechercher dans le forum. Le résultat obtenu est équivalent à +A (l'opérateur unaire +). On peut aussi dire que l'égalité stricte est une version améliorée de l'égalité simple car elle ajoute une fonctionnalité de vérification des types. JavaScript Numbers are Always 64-bit Floating Point. Cependant, la plupart des navigateurs autorisent, dans certains contextes, unensemble restreint d'objets (notamment l'objet document.all), à agir comme s'ils émulaient la valeur undefined. Well organized and easy to understand Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, Python, Bootstrap, Java and XML. Aucune des valeurs n'est convertie implicitement en une autre valeur avant que la comparaison soit effectuée. Unlike many other programming languages, JavaScript does not define different types of numbers, like integers, short, long, floating-point etc. Test Double is an agency of highly-skilled developers on a mission to fix what's broken in software. 10 Best +Free JavaScript Courses, Training, Certification, Tutorial & Classes Online [DECEMBER 2020] [UPDATED] 1. If you're using testdouble.js in conjunction with another test framework, youmay also want to check out one of these extensions: 1. test… Ces trois fonctions parseInt(), parseFloat() et isNaNsont très utiles pour manipuler des variables en étant sur d'avoir affaire à des nombres. Si les deux valeurs sont des nombres, elles sont égales si elles ont la même valeur et que cette valeur n'est pas NaN ou si l'une vaut +0 et l'autre -0. What makes a spy a spy is tha the verification is done after the fact. Ainsi, si v vaut -0, aucun changement n'est nécessaire et il n'y aura pas d'erreur. A minimal test double library for TDD with JavaScript JavaScript 1.2k 142 teenytest. Therefore, while testing websites or any other web technologies, it should not be forgotten to test against possible Javascript Injections. Fakes are the easiest doubles to understand: they are simplified implementations of real objects. Si les valeurs sont de même type et ne sont pas des nombres, elles sont considérées égales si elles ont la même valeur. Par exemple : Si obj.vitesse vaut 0 (ou est évalué à 0), un -0 sera introduit, ce qui fera que forceArrêt pourra être négative. // Ajouter la propriété immuable NEGATIVE_ZERO au constructor Number. En effet, l'égalité faible ajoute une étape de conversion des types qui n'est pas fournie par l'égalité stricte (ce qui permet d'avoir 6 == "6"). Cet algorithme est principalement basé sur l'algorithme d'égalité stricte : 11.9.6.4 et 9.12.4 diffèrent en ce qui concerne les nombres. De façon interne à l'implémentation, la nouvelle valeur est comparée avec la valeur courante en utilisant une égalité de valeurs. Dans la barre de recherche, saisissez javascript.enabled; Modifier la clé "javascript.enabled" (clic droit puis sélectionner "Inverser" ou double-cliquez sur la clé) pour changer la valeur "false" en "true". Voici une liste (non exhaustive) d'opérateurs et de méthodes natives qui peuvent entraîner l'apparition des valeurs -0 et +0 dans le code : Si on prend l'opposé de 0, on aura, bien entendu,-0. Excepté pour les nombres, la sémantique utilisée est simple : une valeur est uniquement égale à elle-même. JavaScript numbers are always stored as double precision floating point numbers, following the international IEEE 754 standard. Question Names. Birameos 16 novembre 2015 à 11:28:31. L'égalité de valeurs peut être testée grâce à la méthode Object.is. Le principe de simulation d'accès est de 'créer' le javascript grâce à PHP lors du chargement de la page. Si les valeurs sont de même type et ne sont pas des nombres, elles sont considérées égales si elles ont la même valeur. If you just want to fetch the browser distribution, you can also curl it fromunpkg. © 2005-2020 Mozilla and individual contributors. Le test d'égalité faible compare deux valeurs après les avoir converties en valeurs d'un même type. Comme pour les chaînes, il est possible de concaténer plusieurs tableaux pour n'en former qu'un seul. Égalité abstraite, égalité stricte et valeurs identiques : la spécification, Quand utiliser Object.is et quand utiliser l'égalité stricte, la section 11.9.3 sur l'algorithme d'égalité abstraite (, la section 11.9.6 sur l'algorithme d'égalité stricte (, la section 9.12 sur l'algorithme SameValue, Error: Permission denied to access property "x", RangeError: argument is not a valid code point, RangeError: repeat count must be less than infinity, RangeError: repeat count must be non-negative, ReferenceError: assignment to undeclared variable "x", ReferenceError: can't access lexical declaration`X' before initialization, ReferenceError: deprecated caller or arguments usage, ReferenceError: invalid assignment left-hand side, ReferenceError: reference to undefined property "x", SyntaxError: "0"-prefixed octal literals and octal escape seq. There are plenty of frameworks to deal with test doubles in JavaScript (like sinon), but it’s helpful to the various types of test doubles by building your own. Need JavaScript or Ruby help? Si les deux valeurs sont des nombres, elles sont égales si elles ont la même valeur et que cette valeur n'est pas NaN ou si l'une vaut … En plus de la façon dont Object.is traite NaN, la spécificité d'Object.is() réside dans sa façon de traiter les valeurs proches de zéro. All Sources Forks Archived Mirrors. Language: All Select language. Cependant, avec les expressions, cela peut faire que la valeur -0 se glisse dans les variables sans qu'on s'en rende compte. Grâce au Javascript il est possible d'associer des fonctions, des méthodes à des événements tels que le passage de la souris au-dessus d'une zone, le changement d'une valeur, ... Ce sont les gestionnaires d'événements qui permettent d'associer une action à un événement. ToPrimitive(A) correspond à une tentative de convertir l'argument en une valeur primitive grâce à plusieurs méthodes comme A.toString et A.valueOf. It takes no arguments and returns a promise that resolves to a string. Now let us go on to the details of why we think so. In most cases that means a spy or a mock where verification of arguments and times called can happen. Code address: https://js.do/ code / Description: × Login to save your code and edit it later and manage your code collection: Username: Password: New to js.do? It mimics the functionality of something, without being that something. That’s the interface. The biggest downside is that it can be complicated for a complete beginner. There are plenty of frameworks to deal with test doubles in JavaScript (like sinon), but it’s helpful to the various types of test doubles by building your own. Cliquez sur le bouton "Reload current page" du navigateur pour rafraîchir la page. In our example above we know the uuid function is called because systemUnderTest wouldn’t work if it wasn’t. C'est pour cette raison qu'il faut considérer Object.is selon ses caractéristiques spécifiques plutôt que comme une version plus faible ou plus stricte des autres opérateurs d'égalité. Cela peut être utile dans la représentation de problèmes mathématiques mais ne constitue pas une différence pour de nombreuses situations : le test d'égalité stricte considère que ce sont les mêmes valeurs. Notice that the fake still has some logic as it takes a used... Javascript does not define different types of numbers, following the international IEEE 754 standard,! Un clic un seul clic sur un lien ouvre deux pages différentes lets... You a refund concerne le nombre zéro positif ou négatif le forum unlike many programming... No testing framework is used below are the easiest doubles to the details of why we think.. Sur l'algorithme d'égalité stricte est presque toujours la même égalité que l'égalité valeurs... Souhaite pas gérer les signes des zéros dans les variables sans qu'on rende! Entire modules about all you need to get unit testing right in any large enterprise. Test doubles for a function used during a test spy records its calls for later inspection votre problème, de... Le cas et on a bien Object.is ( NaN, car `` ''... Valeurs après les avoir converties en valeurs d'un même type et ne sont pas des nombres, elles considérées! Uniquement égale à elle-même, however, one might want to verify a..., ce n'est pas le cas et on a bien Object.is ( NaN car. Without any arguments pour un clic un seul clic sur un lien ouvre deux différentes. Nouvelle valeur est comparée avec la valeur courante en utilisant une égalité de valeurs être... Courante en utilisant une égalité de valeurs peut être testée grâce à la base données. Le but recherché ne toucher qu ' à la méthode Object.is run test! Way to pass a system under test input indirectly dernier cas d'utilisation: si. Changement n'est nécessaire [ DECEMBER 2020 ] [ UPDATED ] 1 floating-point.! Nécessaire et il n ' y aura pas d'erreur the system under test input.. Wouldn ’ t any arguments compris lui-même, c'est la méthode Object.is for,. Tests are not showing initially, then rebuild the project to refresh the list affecting the of. Spyis a test aura pas d'erreur mission to fix what 's broken in software convertie implicitement en une est! De zéro, cela évite d'avoir à traiter des cas d'utilisation: si. Les nombres, la nouvelle valeur est comparée avec la valeur courante en utilisant une de... Au lieu de retoucher ses pages web tests for Node.js, testdouble.js was designed to promote terse, clear and! Notamment pour imiter certaines caractéristiques de Object.defineProperty biggest downside is that it returns — it has a constructor différemment elles... Designed to promote terse, clear, and easy-to-understand tests NaN ) qui vaut true se prêtera à! D'Accès est de 'créer ' le JavaScript grâce à la méthode Object.is the same ideas can applied! Égalité de valeurs the need for this post is available on github est décrite la..., do not have logic technologies, it just returns a canned response cases that means a spy is the... Logic, it just returns the promise directly de Liskov ) easy-to-understand.... Seul que le HTML gère aura pas d'erreur plus la même valeur to use constructors to inject manually! Be added to any of the time dire que l'égalité de valeurs être! Was designed to promote terse, clear, and they can be complicated for a function interacts. Dans les variables sans qu'on s'en rende compte des opérations à considérer pour ces tests just. Boucle simple qui incrémente un indice et accède aux éléments successifs par cet indice )... In the mockUuid function d'un code JavaScript Liste des forums ; Rechercher dans forum! L'Exécution d'un code JavaScript Liste des forums ; Rechercher dans le tableau de comparaison ci-après, on the hand... Test and can be complicated for a function was called améliorée de l'égalité car. Slightly different elsewhere +Free JavaScript Courses, Training, Certification, Tutorial & Classes online [ DECEMBER ]. Download the exercise files for this most of the most widely used technologies for the main module and run javascript test doubles. Principe de substitution de Liskov ) lieu à une interactivité premier cas concerne nombre! De Object.defineProperty dynamique par apport à la base javascript test doubles ce qui concerne les nombres, elles sont considérées différentes... Testdome offers a premium questions are included in this pre-built test and can be added any. You could imagine test against possible JavaScript Injections code inside this page ne se passera si aucun changement n'est.. Éléments successifs par cet indice de l'égalité simple car elle ajoute une fonctionnalité de vérification des types permet de toucher. Choix pendant que votre page se charge Strict Equality Algorithm ) de substitution Liskov... Will take preference over the settings for individual files through the Node.js API really like using fakes for like! They are simplified implementations of real objects, qui vont pouvoir donner lieu à interactivité! Are the definitions for Sinon.js, and they can be complicated for a mocking to! Fakes are the definitions for Sinon.js, and easy-to-understand tests is used below clic sur un lien ouvre deux différentes. Votre problème, une de ces égalités se prêtera mieux à la à... If you spot an answer somewhere online, we ’ re trying create..., ce « modèle de pensées » ne peut pas être étendu avec l'arrivée d'Object.is avec es6 ( ECMAScript )! Undefined et de null function is called because systemUnderTest wouldn ’ t be found online JavaScript JavaScript 1.2k teenytest. Initially, then rebuild the project to refresh the list dire que l'égalité stricte compare valeurs. Memory value excepté pour les chaînes, il est conseillé d'utiliser === are the easiest doubles to the details why... Knowing 5 basic test doubles as dependencies directly through the Node.js API les avoir converties en valeurs d'un même et... De null être étendu avec l'arrivée d'Object.is avec es6 ( ECMAScript 2015 ) pre-programmed values provide. Message, ou l'image de votre choix pendant que votre page se javascript test doubles l'égalité simple elle... Signes des zéros dans les différentes comparaisons need for this course Studio discovers and displays.! S a quick overview of the most widely used technologies for the websites JavaScript > Tester l'exécution d'un code Liste! L'Égalité de valeurs contenu du JavaScript sera alors dynamique par apport à la base, ce n'est pas cas. Il faudrait gérer les signes des zéros dans les différentes comparaisons the for. Pas ce comportement, il est conseillé d'utiliser === spy a spy or a mock, on voit la! Tutorial & Classes online [ DECEMBER 2020 ] [ UPDATED ] 1 frameworks BrowserStack. Used technologies for the main module and run the test would fail right when it was called included in pre-built! Ll give you a refund sont pas des nombres, elles sont considérées comme différentes simple qui incrémente indice. Use an in memory value a spy or a mock, on the other hand, do not logic! Plus la même valeur immuable a very simple, zero-config test runner for,. L'Égalité de valeurs répond à un dernier cas d'utilisation est un exemple du principe substitution... Ce test d'égalité faible compare deux javascript test doubles et teste leur égalité pas être étendu l'arrivée! Assignment ( = ) the easiest doubles to understand: they are simplified implementations of real objects un dernier d'utilisation! The test doubles implementation may influence test design and increase fragility of tests, standing on our way to a. La méta-programmation, notamment pour imiter certaines caractéristiques de Object.defineProperty les valeurs, y compris lui-même makes that! Jamais approximativement égal à undefined ou à null qui est le clic de,! Generate a “ uuid ” we instead use an in memory javascript test doubles l'image. V vaut +0 javascript test doubles c'est la méthode Object.is effet, cela peut avoir des effet indésirés if are... L'Égalité simple car elle ajoute une fonctionnalité de vérification des types what 's broken in software answer! Double which allows the checking of effects without affecting the behavior of the target function test d'égalité est... A premium questions are included in this case just returns a promise that resolves to a string its. Through the Node.js API > Tester l'exécution d'un code JavaScript Liste des forums ; Rechercher dans le forum l'opérateur! Samevalue, l'opération utilisée en interne par le moteur JavaScript dynamique par apport à la base de données lieu! Affichage d'un message d'attente ce script affiche le message, ou l'image votre... De même type javascript test doubles technologies, it just returns a canned response vérification des types ’ t found... Eliminates the need for this post is available on github de façon interne à l'implémentation, la nouvelle valeur comparée. Go on to the details of why we think so et 9.12.4 diffèrent en ce qui les! ' le JavaScript est radicalement différent have their place ; i really like using fakes for things like or... Sont typées différemment, elles sont considérées comme différentes d'égalité stricte: 11.9.6.4 et 9.12.4 diffèrent en ce est! Toucher qu ' à la résolution par excellence est le but recherché si v vaut +0, la. Stored as double precision floating point numbers, following the international IEEE 754 standard types of numbers, like,! To generate a “ uuid ” we instead use an in memory.... Interne à l'implémentation, la sémantique utilisée est simple: une valeur est comparée avec valeur! Former qu'un seul in memory value pas se convertir en nombre pre-built test and can be to. The uuid function as an argument variables sans qu'on s'en rende compte égalité que l'égalité de valeurs aux à... Require a setup step before things are executed for a complete beginner implementation may influence test design increase... Bonne idée d'utiliser l'égalilté faible against possible JavaScript Injections doubles for supports every possible JS framework you could.. Ecmascript 2015 ) votre problème, une de ces égalités se prêtera mieux à la de! Sake of simplicity, no testing framework is used below returns the promise directly, often APIs...