因此,我正在使用企业工具,我们在其中嵌入了JavaScript脚本。这些脚本可以访问某些内置对象。使用模拟对象在JavaScript中进行单元测试
不幸的是,该工具没有提供任何好的方法来单元测试这些脚本。所以我的想法是将脚本保存在回购站中,模拟内置对象,然后设置在我的系统上运行的单元测试。
我对JavaScript如何在构建,类加载等方面的工作非常无知,但我一直在尝试的东西,看看有什么作品。我开始尝试使用Mocha作为节点项目(尽管它只是一个充满脚本的目录,而不是真正的节点项目)。默认的测试有效,但是当我尝试从我的代码中测试函数时,出现编译器错误。
下面是我的项目中的示例脚本的外观。我希望测试的功能,而不是整个脚本:
var thing = builtInObject.foo();
doStuff(thing);
doMoreStuff(thing);
function doStuff(thing) {
// Code
}
function doMoreStuff(thing) {
// More Code
}
这是一个测试文件看起来是这样的:当我输入(“规定”)的脚本
var assert = require('assert');
var sampleScript = require('../scripts/sampleScript.js');
describe('SampleScript', function() {
describe('#doStuff()', function() {
it('should do stuff', function() {
assert.equal(-1, sampleScript.doStuff("input"));
});
});
});
问题发生。我得到编译错误,因为它不是builtInObject。有没有什么办法可以用mock“注入”那些内置的对象?所以我定义了这些对象包含的变量和函数,编译器知道它们是什么?
我接受其他框架或想法。对不起,我的无知,我不是一个真正的JavaScript家伙。而且我知道这有点冒险,但它似乎是最好的选择,因为我没有退出企业工具。
谢谢,你的方法大部分适用于我!一对夫妇跟进问题: 1。我是否也可以预定课程?有像“var builtInClass = new BuiltInClass();”的代码以及。 2.我可以模拟一个函数的返回(就像java中的mockito那么返回())?当我测试doMoreStuff时,我不想让doStuff真正被调用,但我可能需要返回值。 @ antonio-narkevich – user2014969
我想我有点想出#2。使用sinon.stub我可以嘲笑doStuff()的返回。问题是,我的代码现在被编写的方式,它需要函数模拟或在require()时失败。在需求之后,嘲笑该功能需要发生。我想我可能会重构我的代码来解决这个问题。编辑:是的,我想出了一个办法。对不起,我把它变成了我的编码思想过程博客。 – user2014969
嘿男人。关于#1。可能你可以做一些像globa.BuiltInClass = function(){}的东西,你会没事的。 :) –