是否可以将Testacular(Karma)与角度场景混合使用?

iwe*_*ein 9 jasmine angularjs angular-scenario karma-runner

Testacular(现在是Karma)非常棒,角度场景也是如此.然而,将它们结合使用证明是一项挑战.在Testacular中有一个ANGULAR-SCENARIO-ADAPTER,但它打破了简单的测试.如果你自己包含angular-scenario.js,那么Testacular根本就不会运行任何测试.有人有这个正常运行?

角情景ADAPTER

我试过用一个微不足道的测试,但我看到了一些奇怪的行为:

测试:

describe('Simple', function(){
    it('should compare strings', function(){
        expect('foo').toBe('foo');
    });
});
Run Code Online (Sandbox Code Playgroud)

配置的正常行为:

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

    'tests/sample.js'
];
Run Code Online (Sandbox Code Playgroud)

输出:

$ 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)
Run Code Online (Sandbox Code Playgroud)

添加ANGULAR适配器配置时:

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

    'tests/sample.js'
];
Run Code Online (Sandbox Code Playgroud)

输出是:

$ 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)
Run Code Online (Sandbox Code Playgroud)

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

我也试图把angular-scenario.js自己包括在内,但那是一个死路一条.

//inside testacular.conf.js
files = [
   JASMINE,
   JASMINE_ADAPTER,
   'tests/lib/angular/angular.js',
   'tests/sample.js'
];
Run Code Online (Sandbox Code Playgroud)

我得到输出:

$ 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)
Run Code Online (Sandbox Code Playgroud)

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

//inside testacular.conf.js
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'tests/lib/angular/angular.js',
  'tests/lib/angular/angular-scenario.js',
  'tests/sample.js'
];
Run Code Online (Sandbox Code Playgroud)

测试根本不运行:

 $ 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)
Run Code Online (Sandbox Code Playgroud)

有人有这个正常运行?用什么true成为undefined

pko*_*rce 16

你不能混合2合一的testacular配置.你应该做的是准备2个不同的testacular配置:一个用于运行单元测试,另一个用于运行e2e测试.

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

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


小智 12

之所以true变成undefined是你正在使用的角度,场景的版本expect(不是茉莉花的版本),接受一个名为参数future一旦页面加载后会评估到一个页面元素或属性.

Angular-scenario期望future参数是具有value属性的对象.所以当你传入true它时,它会尝试访问true.value哪个求值undefined.

expect({value: true}).toEqual(true); 工作良好.

  • 感谢您清理,提供非常丰富的信息. (2认同)