【问题标题】:How do I structure BDD style tests in multiple files?如何在多个文件中构建 BDD 样式测试?
【发布时间】:2014-11-23 14:04:34
【问题描述】:

如何将 BDD 风格(摩卡、茉莉等)大包装单 describe() 分解为多个文件。我有一个 5,000 行的单元测试文件,全部包装如下:

describe('services',function(){
  describe('serviceA',function(){...});
  describe('serviceB',function(){...});
  describe('serviceC',function(){...});
  describe('serviceD',function(){...});
  // .....
  describe('serviceN',function(){...});
});` 

为了理智起见,我想将每一个('serviceA','serviceB',...,'serviceN')分解成自己的文件。但我希望每个人仍然在describe("services") 内。

我看到了两种方法:

  • 在父级中使用 require:describe('serviceA',require('./services/serviceA'));(重复很多次)
  • 有一些包装器将它们全部包含在内

我不喜欢第二种方法,因为它需要大量保持文件名、require()describe() 同步(因此违反了 DRY)。

我更喜欢每个文件知道它正在测试什么,而不必显式添加路径,而只需让测试运行程序智能地包含 './services' 中的所有内容,从而在 serviceA.js 中包含所有内容:

describe('serviceA', function() {
   // ....
});

但是我需要一些方法将“serviceA”“包装”在“services”中。有什么办法吗?

在这种情况下,我正在通过 karma 测试一个 Angular 应用程序,但概念是相同的。

【问题讨论】:

    标签: jasmine mocha.js karma-runner


    【解决方案1】:

    Jasmine 的describe 对文件的加载没有特殊意义。这是一个描述符。是什么阻止你这样做?

    业力配置:

    files: [
        'src/services/**/*.js',
        'tests/services/**/*.js'
    ]
    

    serviceA.spec.js

    describe('services', function () {
        describe('serviceA', function () {
    
        });
    });
    

    serviceB.spec.js

    describe('services', function () {
        describe('serviceB', function () {
    
        });
    });
    

    【讨论】:

    • 这就是我最后所做的。不喜欢它,但我做到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2011-06-22
    • 2020-01-16
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多