首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能将Testacular (Karma)与angular-scenario混合?

是否有可能将Testacular (Karma)与angular-scenario混合?
EN

Stack Overflow用户
提问于 2012-11-01 16:51:38
回答 2查看 5.1K关注 0票数 9

Testacular (现在是Karma)很棒,angular-scenario也很棒。然而,事实证明,将它们一起使用是一项挑战。在Testacular中有一个ANGULAR-SCENARIO-ADAPTER,但这打破了简单的测试。如果你自己包含angular-scenario.js,Testacular将不会运行任何测试。有没有人把它正常运行了?

角度-场景-适配器

我试着用一个简单的测试来使用它,但我看到了一些奇怪的行为:

测试:

代码语言:javascript
复制
describe('Simple', function(){
    it('should compare strings', function(){
        expect('foo').toBe('foo');
    });
});

config的正常行为:

代码语言:javascript
复制
files = [
  JASMINE,
  JASMINE_ADAPTER,
//    ANGULAR_SCENARIO,
//    ANGULAR_SCENARIO_ADAPTER,
    'tests/lib/angular/angular.js',

    'tests/sample.js'
];

输出:

代码语言:javascript
复制
$ 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适配器配置时:

代码语言:javascript
复制
files = [
  JASMINE,
  JASMINE_ADAPTER,
    ANGULAR_SCENARIO,
    ANGULAR_SCENARIO_ADAPTER,
    'tests/lib/angular/angular.js',

    'tests/sample.js'
];

输出为:

代码语言:javascript
复制
$ 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,但那是一条死胡同。

代码语言:javascript
复制
//inside testacular.conf.js
files = [
   JASMINE,
   JASMINE_ADAPTER,
   'tests/lib/angular/angular.js',
   'tests/sample.js'
];

我得到了输出:

代码语言:javascript
复制
$ 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)

如果我在混合中添加angular-scenario:

代码语言:javascript
复制
//inside testacular.conf.js
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'tests/lib/angular/angular.js',
  'tests/lib/angular/angular-scenario.js',
  'tests/sample.js'
];

测试根本不会运行:

代码语言:javascript
复制
 $ 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有什么用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-01 17:02:25

您不能在一个测试配置中混合使用这两种配置。您应该做的是准备两个不同的测试配置:一个用于运行单元测试,另一个用于运行e2e测试。

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

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

票数 16
EN

Stack Overflow用户

发布于 2013-04-09 01:15:40

true成为undefined的原因是您使用的是angular-scenario版本的expect (而不是Jasmine的版本),它接受一个名为future的参数,该参数将在页面加载后计算为页面元素或属性。

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

expect({value: true}).toEqual(true);工作得很好。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13173719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档