ember.js - 在对插件项目的帮助程序进行单元测试时遇到问题

标签 ember.js ember-cli ember-qunit

https://github.com/stefanpenner/ember-cli/issues/2421

ember-cli:1.2

我有一个样板插件项目,它有一个标题大小写助手,如下所示:

我的助手app/helpers/title-case.js

import Ember from 'ember';

export default Ember.Handlebars.makeBoundHelper(function(string) {

    if (typeof string === 'string') {
        //replace dashes with spaces
        var str = string.dasherize().replace(/-/g, ' ');

        return str.replace(/\w\S*/g, function(word){
            return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
        });
    } else {
        return string;
    }

});

我使用 ember-cli 为助手生成了测试

ember g helper-test title-case

这是输出:

import {
  titleCase
} from 'boilerplate/helpers/title-case';

module('TitleCaseHelper');

// Replace this with your real tests.
test('it works', function() {
  var result = titleCase(42);
  ok(result);
});

现在从 ember-cli 运行测试

ember test

出现以下错误:

Build failed.
File: dummy/tests/unit/helpers/title-case-test.js
ENOENT, no such file or directory '/home/me/git/ember/boilerplate/tmp/tree_merger-tmp_dest_dir-PL6HFkuw.tmp/boilerplate/helpers/title-case.js'
Error: ENOENT, no such file or directory '/home/me/git/ember/boilerplate/tmp/tree_merger-tmp_dest_dir-PL6HFkuw.tmp/boilerplate/helpers/title-case.js'

更新

我尝试将以下内容更改为“虚拟”而不是自动生成的“样板文件”,并删除了大括号。

//import {
//  titleCase
//} from 'dummy/helpers/title-case';
import titleCase from 'dummy/helpers/title-case';

它现在进一步进入测试方法,但在调用 titleCase(42) 时失败:

TypeError: Cannot read property 'isUnbound' of undefined

更新#2

我能够让它工作,但它很难看,我需要访问 ._rawFunction 属性并更改导入语句的格式。

import titleCaseHelper from 'dummy/helpers/title-case';

var titleCase = titleCaseHelper._rawFunction;
module('TitleCaseHelper');

test('Title case lower case letters', function() {
      var result = titleCase('hello world');
      equal(result, 'Hello World');
});

我仍然很困惑为什么 ember-cli 最初生成的测试不起作用。

最佳答案

帮助程序测试生成器期望帮助程序文件具有特定的格式,您可以在生成帮助程序时看到该格式:

ember generate helper hello

这将生成文件 app/helpers/hello.js,其中包含

import Ember from 'ember';

export function hello(input) {
  return input;
};

export default Ember.Handlebars.makeBoundHelper(hello);

它还将在tests/unit/helpers/hello-test.js中为上述内容生成一个单元测试

import {
  hello
} from 'ember-empty/helpers/hello';

module('HelloHelper');

// Replace this with your real tests.
test('it works', function() {
  var result = hello(42);
  ok(result);
});

换句话说,除了绑定(bind)的助手之外,辅助测试生成器还希望您导出原始函数本身。

关于ember.js - 在对插件项目的帮助程序进行单元测试时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687039/

相关文章:

javascript - 使用 JSON Api URL EmberJS

javascript - 渲染多个 View / Controller 对

javascript - 登录后重定向到仪表板 [EMBER.JS]

javascript - 找不到从`AppName/resolver Ember 测试中导入的模块 `ember-resolver`

javascript - Ember 如何在 hbs 中未指定操作的情况下触发操作

javascript - Foundation 5 下拉菜单在可滚动表格行中未对齐

javascript - 如何测试在 ember-qunit 中调用 Ember.run.debounce 的函数?

ember.js - 从 Ember CLI 蓝图生成另一个蓝图

javascript - 如何注册组件以使用 ember-qunit 进行测试?

ember.js - ember-qunit: 你只能卸载一个不是 inFlight 的记录