When comparing Nightwatch.js vs BugBug.io, the Slant community recommends Nightwatch.js for most people. In the question“What are the best Javascript end-to-end testing tools?” Nightwatch.js is ranked 2nd while BugBug.io is ranked 11th. The most important reason people chose Nightwatch.js is:
Nightwatch solves the [Paradox of Choice](http://www.ted.com/talks/barry_schwartz_on_the_paradox_of_choice?language=en) among testing frameworks such as Jasmine, Cucumber or Mocha+Chai, by including its own BDD-style assertion library, based on Chai.
Ranked in these QuestionsQuestion Ranking
Pros

Pro You don't have to choose a testing framework
Nightwatch solves the Paradox of Choice among testing frameworks such as Jasmine, Cucumber or Mocha+Chai, by including its own BDD-style assertion library, based on Chai.
Pro Includes its own testing framework / assertions library
Pro Test organization is out of the box
Supports page object model, custom commands, custom assertions, and globals.js.

Pro 3rd party integration with Cucumber
Though Cucumber is not officially supported, Nightwatch can be used with Cucumber.
Pro Reusable components
You are able to group the steps in tests into reusable components to manage and repair them easier. As a bonus, you can see all test flows on a single project graph.
Pro Great UI & UX
A design for a high efficiency
Pro Debuggability
You can run tests and debug directly from a Chrome browser, where you have access to DevTools.
Cons

Con No official BDD-style syntax support

Con Includes its own testing framework / assertions library
Unlike WebdriverIO, which lets you use various test frameworks and assertion libraries (e.g. Jasmine, Cucumber, Mocha + Chai), Nightwatch comes with its own BDD-style interface for performing assertions, based on Chai.
Here's a simple test example:
module.exports = {
'Demo test Google' : function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'nightwatch')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.pause(1000)
.assert.containsText('#main', 'Night Watch')
.end();
}
};
