testing - 为什么我的 Ember 组件集成测试在单独运行时通过,但在运行完整套件时却失败了?

标签 testing ember.js ember-cli qunit ember-qunit

我对依赖于 i18n 服务(测试注入(inject))的组件进行了简单、基本的集成测试。该组件本身是 ember-select-list 的简单选择下拉列表,默认值为 Select Language。这是测试:

import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';

moduleForComponent('language-select', 'Integration | Component | language select', {
  integration: true,
  beforeEach() {
    this.inject.service('i18n');
  }
});

test('it renders', function(assert) {
  this.render(hbs`{{language-select}}`);

  assert.equal(this.$().text().trim().includes('Select Language'), true);
});

当我尝试只运行这个测试文件时(即 ember test -f "language-select"),我看到的输出表明只执行了 linting 测试:

[ hospitalrun-frontend ] $ ember test -f "language-select"
WARNING: Node v7.5.0 is not tested against Ember CLI on your platform. We recommend that you use the most-recent "Active LTS" version of Node.js.
cleaning up...
Built project successfully. Stored in "/Users/richie.thomas/Desktop/Workspace/OpenSource/hospitalrun-frontend/tmp/core_object-tests_dist-5MT1adu7.tmp".
ok 1 PhantomJS 2.1 - ESLint - acceptance/language-select-test.js: should pass ESLint
ok 2 PhantomJS 2.1 - ESLint - components/language-select.js: should pass ESLint
ok 3 PhantomJS 2.1 - TemplateLint - hospitalrun/templates/components/language-select.hbs: should pass TemplateLint
ok 4 PhantomJS 2.1 - ESLint - integration/components/language-select-test.js: should pass ESLint

1..4
# tests 4
# pass  4
# skip  0
# fail  0

# ok

然而,当我运行一个普通的 ember 测试 时,我发现这个测试失败了,因为我显然错误地注入(inject)了 i18n 服务:

not ok 488 PhantomJS 2.1 - Integration | Component | language select: it renders
---
    actual: >
        null
    expected: >
        null
    stack: >
        http://localhost:7357/assets/hospitalrun.js:4090:18
        get@http://localhost:7357/assets/vendor.js:35757:32
        get@http://localhost:7357/assets/vendor.js:40664:22
        compute@http://localhost:7357/assets/vendor.js:33758:29
        value@http://localhost:7357/assets/vendor.js:33625:52
        value@http://localhost:7357/assets/vendor.js:65639:37
        value@http://localhost:7357/assets/vendor.js:33512:34
        create@http://localhost:7357/assets/vendor.js:31495:53
        evaluate@http://localhost:7357/assets/vendor.js:66320:43
        execute@http://localhost:7357/assets/vendor.js:72898:36
        render@http://localhost:7357/assets/vendor.js:72472:30
        render@http://localhost:7357/assets/vendor.js:30793:52
        runInTransaction@http://localhost:7357/assets/vendor.js:41756:28
        _renderRoots@http://localhost:7357/assets/vendor.js:31058:64
        _renderRootsTransaction@http://localhost:7357/assets/vendor.js:31096:26
        _renderRoot@http://localhost:7357/assets/vendor.js:31017:35
        _appendDefinition@http://localhost:7357/assets/vendor.js:30930:23
        appendOutletView@http://localhost:7357/assets/vendor.js:30913:29
        invoke@http://localhost:7357/assets/vendor.js:19795:19
        flush@http://localhost:7357/assets/vendor.js:19865:15
        flush@http://localhost:7357/assets/vendor.js:19989:20
        end@http://localhost:7357/assets/vendor.js:20059:28
        run@http://localhost:7357/assets/vendor.js:20182:19
        run@http://localhost:7357/assets/vendor.js:40972:32
        render@http://localhost:7357/assets/test-support.js:20665:30
        http://localhost:7357/assets/tests.js:15398:16
        runTest@http://localhost:7357/assets/test-support.js:3859:34
        run@http://localhost:7357/assets/test-support.js:3845:13
        http://localhost:7357/assets/test-support.js:4037:15
        advance@http://localhost:7357/assets/test-support.js:3522:26
        begin@http://localhost:7357/assets/test-support.js:5213:27
        http://localhost:7357/assets/test-support.js:4407:11
    message: >
        Died on test #1 http://localhost:7357/assets/tests.js:15392:24
        exports@http://localhost:7357/assets/vendor.js:123:37
        requireModule@http://localhost:7357/assets/vendor.js:38:25
        require@http://localhost:7357/assets/test-support.js:19547:14
        loadModules@http://localhost:7357/assets/test-support.js:19539:21
        load@http://localhost:7357/assets/test-support.js:19569:33
        http://localhost:7357/assets/test-support.js:7584:22: undefined is not an object (evaluating 'i18n.get')
    Log: |
...

我在 documentation here 中没有看到任何内容关于影响运行的测试类型的过滤器标志(即 lint 与非 lint 测试)。

我很高兴发布一个关于如何正确注入(inject) i18n 服务的单独问题,但我的问题是:

为什么添加 filter 标志会导致仅运行过滤测试?

最佳答案

它过滤模块名,而不是文件名。您在过滤器字符串中有破折号。删除它并改用空格:

ember test -f "language select"

关于testing - 为什么我的 Ember 组件集成测试在单独运行时通过,但在运行完整套件时却失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192664/

相关文章:

ios - "lldb"测试内购错误

javascript - 在模板中使用 Ember 组件的方法

ember.js - 使用 Ember rc1 的 Handlebars 预编译版本错误

ember.js - 使用 Ember-CLI testem 时排除文件

javascript - 如何从 Ember Power Select 传递数据?

testing - Selenium 不会等到网站加载完毕,将您的答案代码放在哪里?

hibernate - 在 gradle 中执行 bash 脚本

c++ - 使用 Visual Studio Test 2010 进行测试

javascript - 在 coffeescript 中调用函数定义的方法

ember.js - 如何在组件中使用 md5.js?