单元测试javascript代码样式

bev*_*qua 5 javascript unit-testing node.js 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();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

至于做这种非传统的测试编写,我没有比做这种测试更进一步(带有非常相似的测试用例列表的数组)

所以我想我的问题是

编写这样的测试是否可以,或者我应该将自己约束到更"静态类型"的测试夹具?

Ben*_*aum 3

好问题!

是的,像这样编写单元测试是完全可以的。甚至还受到鼓励。

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

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

由于没有接口来定义契约,通常情况下,您的测试会定义代码的契约,因此,看到测试执行此类验证(如在代码中)的情况并不罕见,而在 C# 中则不会。