Pregunta

I'm trying to use vows js to create unit tests. I am having trouble when the "topic" is `undefined'. Please see the example below:

var vows = require('vows'),
  assert = require('assert');

function giveMeUndefined(){
  return undefined;
}

vows.describe('Test vow').addBatch({
  'When the topic is undefined': {
    topic: function() {
      return giveMeUndefined();
    },
    'should return the default value of undefined.': function(topic) {
      assert.isUndefined(topic);
    }
  }
}).export(module);

This isn't the code exactly, but it's the gist of it. When I run the test I get "callback not fired." Stepping through the code of vows, I can see that it branches off when topic is undefined.

Ultimately I want to know how I can write the unit test to do this. Someone else on my team wrote what I consider a hack and did the assertion in the topic and returned true or false if topic === undefined.

¿Fue útil?

Solución

From Vows docs :

» A topic is either a value or a function which can execute asynchronous code.

In your example topic is assigned to a function, so vows is expecting asynchronous code.

Simply rewrite your topic as follow :

var vows = require('vows'),
  assert = require('assert');

function giveMeUndefined(){
  return undefined;
}

vows.describe('Test vow').addBatch({
  'When the topic is undefined': {
    topic: giveMeUndefined(),
    'should return the default value of undefined.': function(topic) {
      assert.isUndefined(topic);
    }
  }
}).export(module);

Otros consejos

You can provide a callback like this : Observe lines with **Note**

var vows = require('vows'),
  assert = require('assert');

function giveMeUndefined(callback){//**Note**
  callback(undefined); //**Note**
}

vows.describe('Test vow').addBatch({
  'When the topic is undefined': {
    topic: function(){
     giveMeUndefined(this.callback); // **Note**
    },
    'should return the default value of undefined.': function(undefinedVar, ignore) {
      assert.isUndefined(undefinedVar);
    }
  }
}).export(module);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top