Repository: Codeception/CodeceptJS (js)

Issue:
Need I.comment() or I.remark() or similar
console.log isn't sufficient to print info during tests, because it will run all console.log calls right away instead of at the intuitive time.

You should be able to do this:

```
I.login();
let copyright = yield I.grabTextFrom('div.copyright');
I.comment(`copyright message on page is ${copyright}`);
assert(copyright.indexOf('2016') >= 0, 'Copyright message has correct year');
// Other I. commands
```

Right now we're resorting to ugliness like this:

```
I.dontSee(`copyright message found on page is: ${copyright}`);
```


Pull request description:
Added I.say method
`say` can be used to print comment to screen

```js
I.say('now I want to edit user');
```

Closes #313

Patch:
diff --git a/lib/actor.js b/lib/actor.js
index e963f852..03eb8ce7 100644
--- a/lib/actor.js
+++ b/lib/actor.js
@@ -4,6 +4,7 @@ let container = require('./container');
 let methodsOfObject = require('./utils').methodsOfObject;
 let recorder = require('./recorder');
 let event = require('./event');
+let output = require('./output');
 
 /**
  * Fetches all methods from all enabled helpers,
@@ -14,10 +15,10 @@ module.exports = function (obj) {
   obj = obj || {};
 
   let helpers = container.helpers();
+
+  // add methods from enabled helpers
   Object.keys(helpers)
-    .map(function (key) {
-      return helpers[key];
-    })
+    .map((key) => helpers[key])
     .forEach((helper) => {
       methodsOfObject(helper, 'Helper')
       .filter((method) => {
@@ -32,11 +33,15 @@ module.exports = function (obj) {
             step.name = actionAlias;
             step.actor = container.translation().I;
           }
+          // add methods to promise chain
           return recordStep(step, Array.prototype.slice.call(arguments));
         };
       });
     });
 
+  // add print comment method
+  obj.say = (msg) => recorder.add(`say ${msg}`, () => output.say(msg));
+
   return obj;
 };
 
diff --git a/lib/codecept.js b/lib/codecept.js
index 150e4afe..e4ad9afe 100644
--- a/lib/codecept.js
+++ b/lib/codecept.js
@@ -61,7 +61,7 @@ class Codecept {
 
   loadTests(pattern) {
     pattern = pattern || this.config.tests;
-    glob.sync(fsPath.join(codecept_dir, pattern)).forEach((file) => {
+    glob.sync(fsPath.resolve(codecept_dir, pattern)).forEach((file) => {
       this.testFiles.push(fsPath.resolve(file));
     });
   }
diff --git a/package.json b/package.json
index 0fe4fd99..63c1ddea 100644
--- a/package.json
+++ b/package.json
@@ -53,7 +53,7 @@
     "gulp-mocha": "^2.0.0",
     "gulp-mustache": "^2.2.0",
     "gulp-plumber": "^1.0.0",
-    "guppy-pre-commit": "^0.3.0",
+    "guppy-pre-commit": "^0.4.0",
     "nightmare": "^2.5.2",
     "nightmare-upload": "^0.1.1",
     "protractor": "^4.0.0",


Test patch:
diff --git a/examples/github_test.js b/examples/github_test.js
index 209437cd..060ca3bf 100644
--- a/examples/github_test.js
+++ b/examples/github_test.js
@@ -14,6 +14,7 @@ Scenario('search', (I) => {
 
 Scenario('signin', (I) => {
   I.click('Sign in');
+  I.say('it should not enter');
   I.see('Sign in to GitHub');
   I.fillField('Username or email address', 'something@totest.com');
   I.fillField('Password', '123456');
diff --git a/test/unit/actor_test.js b/test/unit/actor_test.js
index d21bdf84..0b233847 100644
--- a/test/unit/actor_test.js
+++ b/test/unit/actor_test.js
@@ -23,8 +23,8 @@ describe('Actor', () => {
     I = actor();
   });
 
-  it('should take all methods of helpers', () => {
-    I.should.have.keys(['hello', 'bye', 'greeting']);
+  it('should take all methods from helpers and built in', () => {
+    I.should.have.keys(['hello', 'bye', 'greeting', 'say']);
   });
 
   it('should return promise', () => {