javascript - 单元测试javascript代码风格

标签 javascript node.js unit-testing jasmine gruntjs

我开始使用 javascript 单元测试(使用 Jasmine)。

我有单元测试 C# 代码的经验。但鉴于 javascript 是一种动态语言,我发现利用它并使用 javascript 的表达能力编写测试非常有用,例如:

describe('known plugins should be exported', function(){
    var plugins = ['bundle','less','sass','coffee','jsn','minifyCSS','minifyJS','forward','fingerprint'];

    plugins.forEach(function(plugin){
        it('should export plugin named ' + plugin, function(){
            expect(all[plugin]).toBeDefined();
        });
    });
});

就做这种非常规的测试编写而言,我没有比做这种测试更进一步(包含非常相似的测试用例列表的数组)

所以我想我的问题是

像这样编写测试是否合适,还是我应该限制自己使用更“静态类型”的测试夹具?

最佳答案

好问题!

是的,像这样编写单元测试是完全没问题的。它甚至受到鼓励。

JavaScript 是一种动态语言,让您可以非常轻松地模拟对象。 DI 和 IoC 真的很容易做到。 总的来说,使用 Jasmine(或我个人更喜欢的 Mocha)进行测试是一种愉快而有趣的体验。

值得一提的是,由于您使用的是动态语言,因此您需要进行静态类型语言中没有的测试。测试通常强制执行现有的成员和方法以及类型。

没有接口(interface)来定义你的契约,通常,你的测试定义了你的代码的契约,所以经常看到测试在你不会的地方进行这种验证(比如在你的代码中)在 C# 中。

关于javascript - 单元测试javascript代码风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509851/

相关文章:

javascript - 使 HTML 表格适合 Bootstrap 对话框

json - 传感器数据未上传至 artik 云

javascript - 在不同情况下使用 Passport.js 更改和保存重定向

javascript - 将socket.io逻辑与服务器文件分离并访问逻辑文件中的io.sockets

c# - 为什么我的单元测试在不运行测试的情况下成功完成?

javascript - 单击后折叠导航栏保持打开状态

javascript - 如何使用 JavaScript/jQuery 找到两个元素节点之间的所有文本节点?

unit-testing - 为什么 VueX 存储在多个单元测试中保持状态?

javascript - 如何在 Angular 单元测试中创建 ArrayBuffer 变量,Jasmine/Karma

javascript - iPad、iPhone Safari 浏览器 - 时间问题,时差 5 小时