2016-03-05 11 views
7

私はプロジェクトをセットアップし、mochaとアサーションのためのライブラリmjackson/expectでテストを実行しようとしています。TypeScriptのデフォルトインポートに失敗しました

// inside src/lib/math.ts 
export function sum(a: number, b: number): number { 
    return a + b; 
} 

と、次のように私のテストは、次のとおりです:テストするための私のコードがある

// inside src/tests/math.tests.ts 
/// <reference path="../../typings/main/ambient/mocha/mocha.d.ts" /> 
/// <reference path="../../typings/main/ambient/expect/expect.d.ts" /> 

import expect from 'expect'; 

import {sum} from '../lib/math'; 

describe('sum',() => { 
    it('should add two numbers',() => { 
    expect(sum(1, 2)).toEqual(3); 
    }); 
}); 

私は、次のコマンドを使用してTSCでコードをコンパイルすることができる午前:

しかし、私がmochaを私のプロジェクトディレクトリから次のコマンドを使って実行した:

mocha tests

私は私のテストでは、次のエラーを参照してください。私は私のmath.tests.tsのコンパイルされたバージョンを開くと

TypeError: expect_1.default is not a function

が、私はtranspiledコードの先頭に次の行を参照してください。

var expect_1 = require('expect');

これは正常な動作です。今、このコード行が間違っているようだ

expect_1.default(math_1.sum(1, 2)).toEqual(3); 

:私はexpectが呼び出されるテストの中を見たときにしかし、私は次の行を参照してください。 expectライブラリはES6モジュールとしてバンドルされており、expect関数はモジュールからのデフォルトの書き出しです。

しかし、タイプ・スクリプト・コンパイラは、ライブラリからのインポートであるexpect_1default属性にアクセスしようとするコードに私のテストにコードを出しました。 expect_1参照自体は、私のテストで必要とするデフォルトのエクスポート関数であり、無効なexpect_1.defaultではありません。

math.tests.tsexpectという古い構文を使用してインポートするように変更した場合の注意点は、require構文を使用しています。すべてうまく動作します。

私が紛失しているものを理解するのを手伝ってください。

P.S.私はノードv4.3.1でTypeScript 1.8.2を使用します。

+1

私のために 'const expect = require( 'expect');'は動作します – tutok

答えて

0

あなたの期待するパッケージのバージョンが宣言と一致していないようです。私はちょうど1をインストールし、それがdefaultエントリを持っているが見つかりました:

exports['default'] = expect; 
module.exports = exports['default']; 
+0

はい私もそれを見ましたが、まだ正しくインポートされません。私は 'babel'と同じライブラリを試しました。これは 'default'エントリも使うようで、完全に動作します。それでは、これに対する解決策は何でしょうか? – codematix

+1

Babelは 'default'エントリを別の方法で扱います。' default'エントリが見つからなければ、エクスポートされたモジュール全体にフォールバックすることを覚えています。しかし、あなたのコードは 'expect'の現在のバージョンで動作し、JavaScriptレベルでデバッグし、何が間違っているのかを調べるべきです。 – vilicvane

+0

何も動作していないようです。 Typescriptの問題か 'expect'ライブラリの問題かどうかは不明です。私はchai.jsに切り替えました。 – codematix

3

期待する名前空間の種類がNPMパッケージ(@types/expect)にあなたは型チェックを保存するために、小さな回避策を行うことができます間違っているように見えます:

import * as _expect from 'expect'; 
const expect = _expect as any as typeof _expect.default; 
+0

heh、what a workaround – tutok

+0

ありがとうございました。誰かがこれにプルの要求で働いていますか?最新のgithubが既にnpmのインストールで保存できるものから変更されたようです。 –

関連する問題