【问题标题】:Is it possible to mix Testacular (Karma) with angular-scenario?是否可以将睾丸(业力)与角度场景混合?
【发布时间】:2012-11-01 08:51:37
【问题描述】:

Testacular(现在是 Karma)很棒,角度场景也很棒。然而,将它们一起使用是一项挑战。 Testacular 中有一个 ANGULAR-SCENARIO-ADAPTER,但这会破坏简单的测试。如果您自己包含 angular-scenario.js,Testacular 将根本不运行任何测试。有人能正常运行吗?

角度场景适配器

我尝试将它用于一个简单的测试,但我看到了一些奇怪的行为:

测试:

describe('Simple', function(){
    it('should compare strings', function(){
        expect('foo').toBe('foo');
    });
});

配置的正常行为:

files = [
  JASMINE,
  JASMINE_ADAPTER,
//    ANGULAR_SCENARIO,
//    ANGULAR_SCENARIO_ADAPTER,
    'tests/lib/angular/angular.js',

    'tests/sample.js'
];

输出:

$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 25.0): Connected on socket id KRwEUtKtiaJs3MoiEsNg
Chrome 25.0: Executed 1 of 1 SUCCESS (0.061 secs / 0.003 secs)

添加 ANGULAR 适配器配置时:

files = [
  JASMINE,
  JASMINE_ADAPTER,
    ANGULAR_SCENARIO,
    ANGULAR_SCENARIO_ADAPTER,
    'tests/lib/angular/angular.js',

    'tests/sample.js'
];

输出是:

$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 25.0): Connected on socket id 5YZA2fSuNXjmI-yRFGF6
Chrome 25.0 Simple should compare strings FAILED
        expect undefined toBe "foo"
        /Users/iwein/projects/epec/spa/tests/sample.js:3:9: expected "foo" but was undefined
Chrome 25.0: Executed 1 of 1 (1 FAILED) (0.195 secs / 0.018 secs)

添加 angular-scenario.js 并希望 JASMINE-ADAPTER 可以处理。

我自己也尝试过将angular-scenario.js 包括在内,但这是一条死胡同。

//inside testacular.conf.js
files = [
   JASMINE,
   JASMINE_ADAPTER,
   'tests/lib/angular/angular.js',
   'tests/sample.js'
];

我得到输出:

$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 24.0): Connected on socket id uEzVQ6tqSu7M7tak4F6v
Chrome 24.0 Array #indexOf() should return -1 when the value is not present FAILED
    Expected true to be false.
    Error: Expected true to be false.
        at null.<anonymous> (/..../tests/sample.js:4:17)
Chrome 24.0: Executed 1 of 1 (1 FAILED) (0.07 secs / 0.004 secs)

如果我在混合中添加角度场景:

//inside testacular.conf.js
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'tests/lib/angular/angular.js',
  'tests/lib/angular/angular-scenario.js',
  'tests/sample.js'
];

测试根本没有运行:

 $ testacular start
 info: Testacular server started at http://localhost:9876/
 info (launcher): Starting browser ChromeCanary
 info (Chrome 24.0): Connected on socket id GcyCTxuvhyFcCaE14BEP
 Chrome 24.0: Executed 0 of 0 SUCCESS (0.116 secs / 0 secs)

有人让它正常运行吗? true 变成 undefined 是怎么回事?

【问题讨论】:

    标签: angularjs jasmine karma-runner angular-scenario


    【解决方案1】:

    您不能将 2 合一睾丸配置混合在一起。您应该准备两种不同的测试配置:一种用于运行单元测试,另一种用于运行 e2e 测试。

    然后,您将运行 testacular 两次:首先执行单元测试,然后执行 e2e 测试。通常我会非常非常频繁地运行单元测试(每次保存时!),而 e2e 在提交之前进行测试(因为这些测试运行时间更长)。我们希望从单元测试中获得尽可能快的反馈,同时 e2e 测试提供最终的安全网,并确保单元测试难以覆盖的应用程序部分(导航、UI 等)仍然正常工作。

    这是AngularJS种子使用的技术,你可以在这里看到相应的定义:https://github.com/angular/angular-seed/tree/master/config

    【讨论】:

    • 很难说没有看到您的设置...如果您可以在 GitHub 上分享您的代码,我可以尝试提供更多帮助。在我这边,我的单元测试和 e2e 测试运行都没有问题(使用 2 个不同的 testacular 配置文件,如种子中的)。
    • pkozlowski,请check this question。当您阅读此内容时,我将删除我的评论。投票需要在 Karma-Runner 上有代表的人
    【解决方案2】:

    true 变为 undefined 的原因是您使用的是 angular-scenario 的 expect 版本(不是 Jasmine 的版本),它采用一个名为 future 的参数,该参数将评估为页面加载后的页面元素或属性。

    Angular-scenario 期望 future 参数是一个具有value 属性的对象。因此,当您传入true 时,它会尝试访问true.value,其计算结果为undefined

    expect({value: true}).toEqual(true); 工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2020-10-13
      • 2022-10-04
      • 2021-12-07
      • 1970-01-01
      • 2022-08-03
      相关资源
      最近更新 更多