vendredi 26 juin 2015

Create mock error, but can't check the error

I am creating an unit test. After error was thrown to my unit test. I got real error instead.
arn.js is a test subject.
m1.js is an unit test. Right now, I am testing the error which is come from mock fs.readFile().


./arn.js

 var fs = require('fs');
 var filename = ['README.md', 'ioio.txt', 'yoyo.txt','passwd'];

 exports.readFile = function(entry,callback){

     var cntent = fs.readFile(entry, "utf8" ,function(err, data) {
              if (err) throw err;
              //console.log(entry + " : " +  data);
                    if (callback && typeof(callback) === "function") {
                        callback(null,data.substring(0,5));
                    }

     });
}


./test/m1.js

var mock = require('mock')
var realB = require("../arn.js")
var test = require('unit.js');


var trigger1 = function(){
    throw new Error ("File not found in my computer",null);
}; 

var b = mock("../arn.js", {
    fs: {
        readFile: function (entry,encoding, callback) {

                        if (entry === "cody.txt"){
                  var regEx = /txt$/;
                            if(regEx.test(entry)){
                    callback(null,'text2');
                  }
            }

                        if (entry === "notfound.sure"){
                    callback(trigger1);             
            }
        }  
    }
}, require);


describe('Test with static input', function(){

    it('should return text2', function(done){
        b.readFile('cody.txt', function(err,a){
            test.value(a).match('text2');
            done();
        });
    });

    it('should return Invalid file extension', function(done){
            test.error(function(callback){
                callback(b.readFile('notfound.sure'));
            });
            done();
        });

    it('should return Invalid file extension', function(done){
        b.readFile('notfound.sure', function(err, a){
            test.error.hasMessage('File not found in my computer');
            done();
        });
    });

    it('should return not found', function(done){
        test.assert.throws(
            function(){
                b.readFile('notfound.sure');
            },
            function(err){
                if ( (err instanceof Error)){
                    return true;
                }
            },
            "Expected error"
        );
        done();
    });
});


$ mocha test/m1.js

Test with static input
    ✓ should return text2
    1) should return Invalid file extension
    2) should return Invalid file extension
    3) should return not found


  1 passing (9ms)
  3 failing

  1) Test with static input should return Invalid file extension:

      AssertionError: function (){
    throw new Error ("File not found in my computer",null);
} must be an instance of Error
      + expected - actual

      -[Function]
      +{
      +  "captureStackTrace": [Function]
      +  "stackTraceLimit": Infinity
      +}

      at Context.<anonymous> (test/m1.js:39:9)

  2) Test with static input should return Invalid file extension:
     Error: the function [Function] was thrown, throw an Error :)


  3) Test with static input should return not found:
     Error: the function [Function] was thrown, throw an Error :)

How to use unit test in proper way?
Any good example or tutorial I can start?
Best regards
Sarit

Aucun commentaire:

Enregistrer un commentaire