{"id":3984,"date_gmt":"2020-01-07T12:58:00","guid":{"rendered":"https:\/\/chainstack.com\/?p=3984"},"modified":"2025-07-28T20:38:52","modified_gmt":"2025-07-28T12:38:52","slug":"corda-automation-testing-with-nightwatch-js-and-circleci","status":"publish","type":"post","link":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/","title":{"rendered":"Corda automation testing with Nightwatch.js and\u202fCircleCI"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"542\" src=\"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-1024x542.png\" alt=\"\" class=\"wp-image-4015\" srcset=\"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-1024x542.png 1024w, https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-300x159.png 300w, https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-768x407.png 768w, https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-1536x813.png 1536w, https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-530x281.png 530w, https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing-330x175.png 330w, https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png 1700w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Chainstack stopped supporting Corda nodes. Contact our support team at\u00a0<a href=\"mailto:support@chainstack.com\" target=\"_blank\" rel=\"noreferrer noopener\">support@chainstack.com<\/a>\u00a0if you have any questions, or visit our\u00a0<a href=\"https:\/\/support.chainstack.com\/hc\/en-us\" target=\"_blank\" rel=\"noreferrer noopener\">Help Center<\/a>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Testing is an integral part of software development. In <a href=\"https:\/\/chainstack.com\/\">Chainstack<\/a>, we do not only test the platform but also ensure all blockchain protocols work perfectly. In this post, I will share how we carry out end-to-end continuous Corda integration with <a href=\"https:\/\/nightwatchjs.org\" rel=\"noopener noreferrer nofollow\">Nightwatch.js<\/a> and <a href=\"https:\/\/circleci.com\" rel=\"noopener noreferrer nofollow\">CircleCI<\/a>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The code in Corda is written using Kotlin, a programming language from JetBrains, and Nightwatch.js is a Node.js powered end-to-end testing framework. Our challenges are to connect to a node, initiate a flow, and have it signed by relevant parties using JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have a few ideas to do this: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run a Corda web server in our Docker image, and write JavaScript to interact to the CorDapp. <\/li>\n\n\n\n<li>Set up GraalVM (a high-performance polyglot VM) in our Docker image, write a Java function in Nightwatch.js. <\/li>\n\n\n\n<li>Interact with Corda Standalone Shell client by executing a shell script in Node.js, then verify the output of the shell script. <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The first two ideas seem possible, but we need to include CorDapp source code in the test, which is non-optimal and inconvenient. Eventually, the last one is better and simpler. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We use <a href=\"https:\/\/docs.chainstack.com\/tutorials\/corda\/no-ticket-scalping-cordapp\">No ticket scalping CorDapp<\/a> for our test. You may want to explore it before moving to details. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Technology stack<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These are the details of programming languages, tools, and frameworks we used in the test:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li> Nightwatch.js 1.3.2 \/ Node.js 11 \/ shell script;<\/li>\n\n\n\n<li> Docker;<\/li>\n\n\n\n<li> CircleCI 2.0;<\/li>\n\n\n\n<li> OpenJDK-8;<\/li>\n\n\n\n<li> <a href=\"https:\/\/github.com\/corda\/corda-shell\" rel=\"noopener noreferrer nofollow\">Corda Standalone Shell client<\/a>;<\/li>\n\n\n\n<li> <a href=\"https:\/\/github.com\/chainstack\/no-ticket-scalping-cordapp\/releases\" rel=\"noopener noreferrer nofollow\">No ticket scalping CorDapp<\/a> installed on two Corda nodes, running on <a href=\"https:\/\/chainstack.com\/\">Chainstack<\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I assume that you are familiar with the Nightwatch.js framework, so I won\u2019t focus on the structure as well as the test case code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Besides the Corda Standalone Shell client, Chainstack also provides <a rel=\"noopener noreferrer nofollow\" href=\"https:\/\/github.com\/chainstack\/corda-shell-docker\">Chainstack standalone shell<\/a>, which is a containerized version of Corda Standalone Shell, and which helps you interact with the CorDapps. You can learn more about it in our <a href=\"https:\/\/docs.chainstack.com\/operations\/corda\/tools#corda-standalone-shell\">official documentation<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/4512\/1*pNihfajiZ7exebptLBBuRg.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Node details and credentials in Chainstack.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"e759\">Install OpenJDK-8 in Docker image<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You need to install&nbsp;<strong>OpenJDK-8<\/strong>&nbsp;to run Corda Standalone Shell client; add the following lines into your Docker file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Install OpenJDK-8\nRUN apt-get update &amp;&amp; \\\n    apt-get install -y openjdk-8-jdk &amp;&amp; \\\n    apt-get install -y ant &amp;&amp; \\\n    apt-get clean;\n\n# Fix certificate issues\nRUN apt-get update &amp;&amp; \\\n    apt-get install ca-certificates-java &amp;&amp; \\\n    apt-get clean &amp;&amp; \\\n    update-ca-certificates -f;\n\n# Setup JAVA_HOME -- useful for docker commandline\nENV JAVA_HOME \/usr\/lib\/jvm\/java-8-openjdk-amd64\/\nRUN export JAVA_HOME<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You may need to build your Docker image again.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build .<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0d05\">Write a shell script to interact with No ticket scalping CorDapp<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can learn the prerequisites to run Corda Standalone Shell client at <a href=\"https:\/\/docs.chainstack.com\/operations\/corda\/tools#corda-standalone-shell\">Chainstack Docs<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The below script will do the following things:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connect to Corda&nbsp;<strong>Node 1<\/strong>.<\/li>\n\n\n\n<li>Print out all flows in&nbsp;<strong>Node 1<\/strong>.<\/li>\n\n\n\n<li>Start&nbsp;<strong>noScalpFlow<\/strong>&nbsp;flow to distribute&nbsp;<strong>99<\/strong>&nbsp;tickets of event&nbsp;<strong>Chainstack live concert<\/strong>&nbsp;from&nbsp;<strong>Node 1<\/strong>&nbsp;to&nbsp;<strong>Node 2<\/strong>.<\/li>\n\n\n\n<li>Verify the transaction by executing the&nbsp;<code>vaultQuery<\/code>&nbsp;command.<\/li>\n\n\n\n<li>Exit the Corda Standalone Shell client.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># location of binary files\nCORDA_CLI=\"corda-tools-shell-cli-4.3-all.jar\"\nCORDAPP_DIR=\"..\/my-cordapps\/\"\n\n# node 1 credentials\nNODE1_HOST=\"nd-255-728-694.rg-837-380.int.chainstack.com\"\nNODE1_PORT=\"10201\"\nNODE1_USER=\"vibrant_ptolemy\"\nNODE1_PASS=\"*****\"\n\n# node 2 legal name\nNODE2_LEGALNAME=\"OU=Chainstack-ND-026-270-261, O=Chainstack, L=Singapore, C=SG\"\n\n# command to connect to Corda node 1\nSTART_CORDAPP=\"java -jar $CORDA_CLI --host=$NODE1_HOST --port=$NODE1_PORT --user=$NODE1_USER --password=$NODE1_PASS --cordapp-directory=$CORDAPP_DIR\"\n\n# launch the Corda Standalone Shell client and run flow commands\n{\n  echo \"flow list\"\n  echo \"start noScalpFlow eventName: 'Chainstack live concert', ticketQuantity: 99, toDistributor: '$NODE2_LEGALNAME'\"\n  echo \"run vaultQuery contractStateType: com.noScalpDapp.states.noScalpState\"\n  echo \"bye\"\n} | $START_CORDAPP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Save as a&nbsp;<strong>start_cordapp.sh<\/strong>&nbsp;file, and run it in the terminal.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/2660\/1*LfwDoHZHp895P0MCI1gq2Q.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Interact with CorDapp in terminal.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Checking the output, there should be a transaction. You can use this information to verify whether the test passed or not.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Flow completed with result: SignedTransaction(id=C98A2B49358B9FC6C1C8EEBAA99DF36238E9E4F97CF492905C2A1EF25B1B9639)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"042e\">Execute the shell script by Node.js and verify the output<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the below code, I write a function to start the&nbsp;<strong>noScalpFlow<\/strong>&nbsp;flow, print out, and verify its result. In Node.js, the <code>child_process<\/code>&nbsp;module provides the ability to spawn child processes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then, I combine&nbsp;<code>child_process.exe()<\/code>&nbsp;and&nbsp;<code>util.promisify()<\/code>&nbsp;to create an async function which returns a boolean Promise.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Nodejs utils to execute the shell script asynchronously\nconst { promisify } = require('util');\nconst exec = promisify(require('child_process').exec);\n\n\/**\n * Run noScalpFlow flow and verify the result\n * @param {Object} node1 First node\n * @param {Object} node2 Second node\n *\/\nasync function verifyFlow(node1, node2) {\n  const CORDA_CLI = 'corda-tools-shell-cli-4.3-all.jar';\n  const CORDAPP_DIR = '..\/my-cordapps\/';\n  const START_CORDAPP = `java -jar ${CORDA_CLI} --host=${node1.host} --port=${node1.port} --user=${node1.user} --password=${node1.pass} --cordapp-directory=${CORDAPP_DIR}`;  \n\n  \/\/ launch the Corda Shell client and run flow commands\n  const { stdout } = await exec(`\n    START_CORDAPP=\"${START_CORDAPP}\"\n    {\n      echo \"flow list\"\n      echo \"start noScalpFlow eventName: 'Chainstack live concert', ticketQuantity: 99, toDistributor: '${node2.legalName}'\"\n      echo \"run vaultQuery contractStateType: com.noScalpDapp.states.noScalpState\"\n      echo \"bye\"\n    } | $START_CORDAPP\n  `);  \n\n  \/\/ Print out the output\n  console.log(stdout);  \n\n  \/\/ Verify the output\n  return stdout.includes('Flow completed with result: SignedTransaction');\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After that, you need a test scenario using the Nightwatch.js framework.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Node 1 credentials\nconst node1 = {\n  host: 'nd-255-728-694.rg-837-380.int.chainstack.com',\n  port: '10201',\n  user: 'vibrant_ptolemy',\n  pass: '*****',\n};\n\n\/\/ Node 2 legal name\nconst node2 = {\n  legalName: 'OU=Chainstack-ND-026-270-261, O=Chainstack, L=Singapore, C=SG',\n};\n\nmodule.exports = {\n  '@tags': &#91;'runCorDappFlow'],  \n\n  'Run CorDapp flow'(browser) {\n    const { page } = browser;\n    const corda = page.nodes.corda();    \n\n    \/\/ Run flow and verify result\n    browser.perform(async () =&gt; {\n      await corda.verifyFlow(node1, node2);\n    });    \n    \n    browser.end();\n  },\n};<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Commit your code and run the workflow in CircleCI; it will take a few minutes to complete. In my scenario, I get the credentials of&nbsp;<strong>Node 1<\/strong>&nbsp;and&nbsp;<strong>Node 2<\/strong>, run the&nbsp;<strong>noScalpFlow<\/strong>&nbsp;flow, and verify the output. You can see the results in the below screenshot.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/5760\/1*s2Pm8zje1JUkCIDPAC3ArQ.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Running CorDapp flow in CircleCI.<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Before writing this post, I have done a lot of research to find the best solution for Corda automation testing as most of the resources from the Internet focus on building CorDapps. I believe this post will help your team to test, speed up, and secure your Corda applications like what the Chainstack team is doing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can try Chainstack for free at&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/console.chainstack.com\/\" target=\"_blank\">https:\/\/console.chainstack.com<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Join our community of innovators<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To learn more about Chainstack, visit our\u202f<a href=\"https:\/\/docs.chainstack.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Knowledge Center<\/a>\u202for join our&nbsp;<a href=\"https:\/\/discord.gg\/Cymtg2f7pX\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Discord server<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/t.me\/chainstack\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Telegram group<\/a>.<\/li>\n\n\n\n<li>Sign up for a&nbsp;<a href=\"https:\/\/console.chainstack.com\/sign-up\" target=\"_blank\" rel=\"noreferrer noopener\">free Developer account<\/a>, or explore the options offered by Growth or Business plans here.<\/li>\n\n\n\n<li>Take a look at our pricing tiers using a&nbsp;<a href=\"https:\/\/chainstack.com\/pricing\/\" target=\"_blank\" rel=\"noreferrer noopener\">handy calculator<\/a>&nbsp;to estimate usage and number of nodes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Have you already explored what you can achieve with Chainstack?&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/console.chainstack.com\/sign-up\" target=\"_blank\">Get started for free today<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A complete walkthrough to create an end-to-end continuous integration and testing for Corda.<\/p>\n","protected":false},"author":11,"featured_media":4015,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[340],"tags":[29],"class_list":["post-3984","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-corda"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Corda automation testing with Nightwatch.js and\u202fCircleCI<\/title>\n<meta name=\"description\" content=\"We will show you how to carry out an end-to-end continuous Corda integration with Nightwatch.js and CircleCI.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Corda automation testing with Nightwatch.js and\u202fCircleCI\" \/>\n<meta property=\"og:description\" content=\"We will show you how to carry out an end-to-end continuous Corda integration with Nightwatch.js and CircleCI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/\" \/>\n<meta property=\"og:site_name\" content=\"Chainstack\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/chainstack\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-07T12:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-28T12:38:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1700\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Phap Duong Dieu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/chainstack.com\/wp-content\/uploads\/2025\/07\/Screenshot-2025-07-07-at-2.53.10-PM.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@ChainstackHQ\" \/>\n<meta name=\"twitter:site\" content=\"@ChainstackHQ\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Phap Duong Dieu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/\"},\"author\":{\"name\":\"Phap Duong Dieu\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/#\\\/schema\\\/person\\\/f2c27b914d444555a114cf94bc283440\"},\"headline\":\"Corda automation testing with Nightwatch.js and\u202fCircleCI\",\"datePublished\":\"2020-01-07T12:58:00+00:00\",\"dateModified\":\"2025-07-28T12:38:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/\"},\"wordCount\":784,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/corda-automation-testing.png\",\"keywords\":[\"Corda\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/\",\"url\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/\",\"name\":\"Corda automation testing with Nightwatch.js and\u202fCircleCI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/corda-automation-testing.png\",\"datePublished\":\"2020-01-07T12:58:00+00:00\",\"dateModified\":\"2025-07-28T12:38:52+00:00\",\"description\":\"We will show you how to carry out an end-to-end continuous Corda integration with Nightwatch.js and CircleCI.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#primaryimage\",\"url\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/corda-automation-testing.png\",\"contentUrl\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/corda-automation-testing.png\",\"width\":1700,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/corda-automation-testing-with-nightwatch-js-and-circleci\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/chainstack.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorials\",\"item\":\"https:\\\/\\\/chainstack.com\\\/category\\\/tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Corda automation testing with Nightwatch.js and\u202fCircleCI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/#website\",\"url\":\"https:\\\/\\\/chainstack.com\\\/\",\"name\":\"Chainstack\",\"description\":\"Managed services for blockchain\",\"publisher\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/chainstack.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/#organization\",\"name\":\"Chainstack\",\"url\":\"https:\\\/\\\/chainstack.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/Logo-Blue@3x-Padded.png\",\"contentUrl\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/Logo-Blue@3x-Padded.png\",\"width\":3266,\"height\":684,\"caption\":\"Chainstack\"},\"image\":{\"@id\":\"https:\\\/\\\/chainstack.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/chainstack\",\"https:\\\/\\\/x.com\\\/ChainstackHQ\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/chainstack\\\/\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/chainstack\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/#\\\/schema\\\/person\\\/f2c27b914d444555a114cf94bc283440\",\"name\":\"Phap Duong Dieu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/phap-150x150.png\",\"url\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/phap-150x150.png\",\"contentUrl\":\"https:\\\/\\\/chainstack.com\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/phap-150x150.png\",\"caption\":\"Phap Duong Dieu\"},\"description\":\"Frontend developer of Chainstack\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Corda automation testing with Nightwatch.js and\u202fCircleCI","description":"We will show you how to carry out an end-to-end continuous Corda integration with Nightwatch.js and CircleCI.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/","og_locale":"en_US","og_type":"article","og_title":"Corda automation testing with Nightwatch.js and\u202fCircleCI","og_description":"We will show you how to carry out an end-to-end continuous Corda integration with Nightwatch.js and CircleCI.","og_url":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/","og_site_name":"Chainstack","article_publisher":"https:\/\/www.facebook.com\/chainstack","article_published_time":"2020-01-07T12:58:00+00:00","article_modified_time":"2025-07-28T12:38:52+00:00","og_image":[{"width":1700,"height":900,"url":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png","type":"image\/png"}],"author":"Phap Duong Dieu","twitter_card":"summary_large_image","twitter_image":"https:\/\/chainstack.com\/wp-content\/uploads\/2025\/07\/Screenshot-2025-07-07-at-2.53.10-PM.jpg","twitter_creator":"@ChainstackHQ","twitter_site":"@ChainstackHQ","twitter_misc":{"Written by":"Phap Duong Dieu","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#article","isPartOf":{"@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/"},"author":{"name":"Phap Duong Dieu","@id":"https:\/\/chainstack.com\/#\/schema\/person\/f2c27b914d444555a114cf94bc283440"},"headline":"Corda automation testing with Nightwatch.js and\u202fCircleCI","datePublished":"2020-01-07T12:58:00+00:00","dateModified":"2025-07-28T12:38:52+00:00","mainEntityOfPage":{"@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/"},"wordCount":784,"commentCount":0,"publisher":{"@id":"https:\/\/chainstack.com\/#organization"},"image":{"@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#primaryimage"},"thumbnailUrl":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png","keywords":["Corda"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/","url":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/","name":"Corda automation testing with Nightwatch.js and\u202fCircleCI","isPartOf":{"@id":"https:\/\/chainstack.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#primaryimage"},"image":{"@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#primaryimage"},"thumbnailUrl":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png","datePublished":"2020-01-07T12:58:00+00:00","dateModified":"2025-07-28T12:38:52+00:00","description":"We will show you how to carry out an end-to-end continuous Corda integration with Nightwatch.js and CircleCI.","breadcrumb":{"@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#primaryimage","url":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png","contentUrl":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/corda-automation-testing.png","width":1700,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/chainstack.com\/corda-automation-testing-with-nightwatch-js-and-circleci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/chainstack.com\/"},{"@type":"ListItem","position":2,"name":"Tutorials","item":"https:\/\/chainstack.com\/category\/tutorials\/"},{"@type":"ListItem","position":3,"name":"Corda automation testing with Nightwatch.js and\u202fCircleCI"}]},{"@type":"WebSite","@id":"https:\/\/chainstack.com\/#website","url":"https:\/\/chainstack.com\/","name":"Chainstack","description":"Managed services for blockchain","publisher":{"@id":"https:\/\/chainstack.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/chainstack.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/chainstack.com\/#organization","name":"Chainstack","url":"https:\/\/chainstack.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/chainstack.com\/#\/schema\/logo\/image\/","url":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/03\/Logo-Blue@3x-Padded.png","contentUrl":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/03\/Logo-Blue@3x-Padded.png","width":3266,"height":684,"caption":"Chainstack"},"image":{"@id":"https:\/\/chainstack.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/chainstack","https:\/\/x.com\/ChainstackHQ","https:\/\/www.linkedin.com\/company\/chainstack\/","https:\/\/www.youtube.com\/c\/chainstack"]},{"@type":"Person","@id":"https:\/\/chainstack.com\/#\/schema\/person\/f2c27b914d444555a114cf94bc283440","name":"Phap Duong Dieu","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/phap-150x150.png","url":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/phap-150x150.png","contentUrl":"https:\/\/chainstack.com\/wp-content\/uploads\/2019\/12\/phap-150x150.png","caption":"Phap Duong Dieu"},"description":"Frontend developer of Chainstack"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/posts\/3984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/comments?post=3984"}],"version-history":[{"count":3,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/posts\/3984\/revisions"}],"predecessor-version":[{"id":31384,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/posts\/3984\/revisions\/31384"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/media\/4015"}],"wp:attachment":[{"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/media?parent=3984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/categories?post=3984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chainstack.com\/wp-json\/wp\/v2\/tags?post=3984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}