nodejs url.parse测试返回未定义的结果



这可能是一个非常愚蠢的问题,但如果我只是传递一个URL字符串,比如proto.getProtocol("http://www.some.com/test"),那么url.parse在这种情况下会返回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);按原样返回undefined。

测试:

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);
});
});

您正在使用proxyquiregetProtocolurl.parse方法替换为不进行URL解析的函数(即sinon.spy()生成的Sinon间谍函数)。spy函数可以告诉你它是否被调用,但它对削减URL一无所知。

您可能打算执行sinon.spy(require("url"), "parse"),它生成一个调用require("url").parse并返回结果的间谍函数。相比之下,sinon.spy()返回的函数除了记住它是如何被调用之外,什么都不做。

代码运行良好。

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' }

你能发布你正在使用的全部代码吗?

最新更新