2015-05-11 3 views
0

Это может быть очень глупый вопрос, но есть ли причина, почему url.parse вернет undefined в этом случае, если бы я просто передал строку URL-адреса, например proto.getProtocol("http://www.some.com/test")?nodejs url.parse test возвращает undefined

Пожалуйста, обратите внимание, что я новичок с nodejs.

'use strict'; 

var url = require("url"); 

var proto = {}; 

proto.getProtocol = function (path) { 
    console.log(path); 
    var parts = url.parse(path, true); 
    console.log(parts); 
    return parts; 
}; 

module.exports = proto; 

console.log(parts); возвращает неопределенное значение, как это, когда я запускаю тесты.

Тест:

var chai = require('chai'); 
var sinonChai = require("sinon-chai"); 
var expect = chai.expect; 
var extend = require('lodash').extend; 
var sinon = require('sinon'); 
chai.use(sinonChai); 
var proxyquire = require('proxyquire'); 

describe("getProtocol", function() { 
    var testedModule, parseSpy, path; 


    before(function() { 

     path = "http://www.some.com/test"; 

     parseSpy = sinon.spy(); 

     testedModule = proxyquire('../getProtocol.js', { 
      'url': { 
       'parse': parseSpy 
      } 
     }); 

     testedModule.getProtocol(path); 
    }); 

    it("calls url.parse", function() { 
     expect(parseSpy).has.been.calledOnce.and.calledWithExactly(path, true); 
    }); 
}); 

ответ

1

Вы используете proxyquire заменить url.parse метод getProtocol «s с функцией, которая не делает URL разбора (то есть функция шпион Sinon, произведенный sinon.spy()). Функция spy может рассказать вам, была ли она вызвана, но ничего не знает об URL-адресах.

Возможно, вы должны были сделать sinon.spy(require("url"), "parse"), который производит функцию шпиона, которая вызывает require("url").parse и возвращает результат. Напротив, функция, возвращаемая sinon.spy(), ничего не делает, за исключением того, что она была вызвана.

+0

Вот и все. благодаря – hyprstack

1

код работает отлично.

var proto = require('./proto'); 

var parts = proto.getProtocol("http://www.some.com/test"); 
console.log(parts); 

{ protocol: 'http:', 
    slashes: true, 
    auth: null, 
    host: 'www.some.com', 
    port: null, 
    hostname: 'www.some.com', 
    hash: null, 
    search: '', 
    query: {}, 
    pathname: '/test', 
    path: '/test', 
    href: 'http://www.some.com/test' } 

Можете ли вы разместить весь код, который используете?

+0

до сих пор это все. возможно, что-то не так с моей тестовой настройкой. Я буду обновлять тесты. – hyprstack

Смежные вопросы