小编Mat*_*lor的帖子

如何对需要其他模块的node.js模块进行单元测试

这是一个简单的例子,说明了我的问题的关键:

var innerLib = require('./path/to/innerLib');

function underTest() {
    return innerLib.doComplexStuff();
}

module.exports = underTest;
Run Code Online (Sandbox Code Playgroud)

我正在尝试为此代码编写单元测试.如何在innerLibrequire完全嘲笑函数的情况下模拟出对该函数的要求?

编辑:所以这是我试图模拟全局需求,并发现它甚至不会这样做:

var path = require('path'),
    vm = require('vm'),
    fs = require('fs'),
    indexPath = path.join(__dirname, './underTest');

var globalRequire = require;

require = function(name) {
    console.log('require: ' + name);
    switch(name) {
        case 'connect':
        case indexPath:
            return globalRequire(name);
            break;
    }
};
Run Code Online (Sandbox Code Playgroud)

问题是requireunderTest.js文件中的函数实际上没有被模拟出来.它仍然指向全球require功能.所以我似乎只能underTest.js在同一个文件中模拟我正在进行模拟的函数.如果我使用全局require来包含任何内容,即使在我重写本地副本之后,所需的文件仍将具有全局require引用.

javascript mocking node.js

149
推荐指数
4
解决办法
7万
查看次数

如何匹配表达式后的第一个单词与正则表达式?

例如,在本文中:

Lorem ipsum dolor坐下来,精致的adipistur elit.Nunc eu tellus vel nunc pretium lacinia.Proin sed lorem.Cras sed ipsum.Nunc a libero quis risus sollicitudin imperdiet.

我想在'ipsum'之后匹配这个词.

regex lookbehind word-boundary

18
推荐指数
2
解决办法
6万
查看次数

使用'new'调用函数比不使用它更便宜?

鉴于这种非常熟悉的原型构造模型:

function Rectangle(w,h) {
    this.width = w;
    this.height = h;
}
Rectangle.prototype.area = function() { 
    return this.width * this.height;
};
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么呼叫new Rectangle(2,3)持续比Rectangle(2,3)没有'new'关键字呼叫快10倍?我会假设因为new会通过涉及原型来增加函数执行的复杂性,所以它会更慢.

例:

var myTime;
function startTrack() {
    myTime = new Date();
}
function stopTrack(str) {
    var diff = new Date().getTime() - myTime.getTime();
    println(str + ' time in ms: ' + diff);
}

function trackFunction(desc, func, times) {
    var i;
    if (!times) times = 1;
    startTrack();
    for (i=0; i<times; i++) {
        func();
    }
    stopTrack('(' + times …
Run Code Online (Sandbox Code Playgroud)

javascript constructor class prototypal-inheritance

12
推荐指数
1
解决办法
3793
查看次数

从构造函数中附加方法到原型

以下是直接从JavaScript的权威指南中描述JavaScript中的"类"或构造函数的教科书标准方法:

function Rectangle(w,h) {
    this.width = w;
    this.height = h;
}
Rectangle.prototype.area = function() { 
    return this.width * this.height;
};
Run Code Online (Sandbox Code Playgroud)

我不喜欢这里的悬空原型操作,所以我试图想出一种方法来封装area构造函数内部的函数定义.我想出了这个,我也没有想到的工作:

function Rectangle(w,h) {
    this.width = w;
    this.height = h;
    this.constructor.prototype.area = function() { 
        return this.width * this.height;
    };
}
Run Code Online (Sandbox Code Playgroud)

我没想到这个工作,因为this内部参考area函数应该指向area函数本身,所以我不会有访问widthheightthis.但事实证明我做到了!

var rect = new Rectangle(2,3);
var area = rect.area(); // great scott! it is 6
Run Code Online (Sandbox Code Playgroud)

一些进一步的测试证实,函数this内部的引用area实际上是对正在构造 …

javascript prototypal-inheritance

9
推荐指数
1
解决办法
2814
查看次数

如何使用内联函数声明字典

在将其用作字典元素之前,是否必须正式定义函数?

def my_func():
  print 'my_func'

d = {
  'function': my_func
}
Run Code Online (Sandbox Code Playgroud)

我宁愿定义内联函数.我只是尝试输入我想要做的事情,但是python语法的空白策略使得在dict中定义内联函数变得非常困难.有没有办法做到这一点?

python

9
推荐指数
4
解决办法
2万
查看次数

在匿名函数中测试JavaScript函数

可以在myInnerFunction下面测试吗?

var val = function() {
    var myInnerfunction = function(input) {
        return input + ' I ADDED THIS';
    };
    return myInnerfunction('test value');
}();
Run Code Online (Sandbox Code Playgroud)

因为myInnerFunction它本质上是匿名执行的外部函数的私有成员,所以它似乎不是从外部可测试的.

javascript testing

8
推荐指数
2
解决办法
2201
查看次数

IE7默认表单方法是"GET".如何判断它是用户输入还是默认?

如果用户创建没有方法属性的表单,似乎大多数浏览器将在表单提交时处理此问题.因此,在DOM准备好之后检查表单元素时,您可以看到表单元素对象没有"方法"attr.

但是,IE7显然在没有方法值的所有表单上设置了"GET"的默认方法值.我不想争论GET或POST是否是最合理的默认值,我只是想找到一种方法使POST成为所有浏览器的默认表单方法.

我的问题是我无法判断用户是否为表单方法输入了"GET"值,或者IE是否将该值注入默认值.如果表单没有方法属性,很明显用户没有指定一个,所以我可以安全地将其默认为POST.但是如果我看到一个表单方法的GET值,我无法判断用户是否指定了它,或者它是否为黑色并且IE7在解析HTML时设置了GET.

有人有主意吗?

javascript browser internet-explorer dom

7
推荐指数
1
解决办法
4632
查看次数

获取对运算符后面的JavaScript Function对象的引用

这是一个lisp过程,简单地将'a'添加到'b'的绝对值:

(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
Run Code Online (Sandbox Code Playgroud)

我认为这很漂亮,我试图找到用JavaScript编写这个的最好方法.但我的JavaScript代码不漂亮:

var plus = function(a,b) {
    return a + b;
};

var minus = function(a,b) {
    return a - b;
};

var aPlusAbsB = function(a,b) {
    return (b > 0 ? plus : minus)(a,b);
}
Run Code Online (Sandbox Code Playgroud)

主要问题是我不能使用+-符号作为他们真正代表的函数的引用,因为我可以使用lisp.任何人都可以想出更优雅的方式来做这样的事情,或者我是否达到了语言界限?

显然,我可以这样做:

var aPlusAbsB = function(a,b) {
    return a + Math.abs(b);
}
Run Code Online (Sandbox Code Playgroud)

,但这更像是一个思想实验,而不是一个实用的问题.

有没有什么方法可以引用JavaScript语言中的核心函数,就像它们是用户定义的一样?

javascript lisp scheme functional-programming

7
推荐指数
2
解决办法
548
查看次数