3

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

エンバークリ: 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 によって生成された元のテストが機能しなかった理由について、私はまだ混乱しています。

4

1 に答える 1

3

ヘルパー テスト ジェネレーターは、ヘルパー ファイルが特定の形式であることを想定しています。これは、ヘルパーを生成すると確認できます。

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);
});

つまり、ヘルパー テスト ジェネレーターは、バインドされたヘルパーに加えて、生の関数自体もエクスポートすることを期待しています。

于 2015-02-01T13:49:04.663 に答える