質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.54%

inversifyJsの@Injectを使用したらjestで構文エラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 69

torikatsu

score 0

前提・実現したいこと

jestでユニットテストをしていたら下記のエラーにでくわし、はまりました。
inversifyJsの@Injectを使うとなぜか構文エラーになります。

発生している問題・エラーメッセージ

Test suite failed to run

    /Users/*********/Desktop/******/app/application/timeline/CursorCreator.ts:20
    var CursorCreator = (_dec = (0, _inversify.injectable)(), _dec(_class = (_temp = function CursorCreator(@(0, _inversify.inject)(_types.default.CursorDao)
                                                                                                            ^

    SyntaxError: Invalid or unexpected token

      2 | import { CursorDao } from "../../../app/di/interfaces";
      3 | import Timestamp from "../../../app/util/Timestamp";
    > 4 | import CursorCreator from "../../../app/application/timeline/CursorCreator";
        | ^
      5 | 
      6 | describe('CursorCreatorTest', () => {
      7 | 

      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
      at Object.<anonymous> (__tests__/application/timeline/CursorCreatorTest.ts:4:1)

該当のソースコード

import { CursorDao } from "../../di/interfaces";
import Timestamp from "../../util/Timestamp";
import { injectable, inject } from "inversify";
import TYPES from "../../di/types";

@injectable()
class CursorCreator {
  private readonly dao: CursorDao
  private readonly LIMIT_ELAPSE = 4;
  private readonly SEC_OF_A_DATE = (60 * 60 * 24);

  constructor(@inject(TYPES.CursorDao) dao: CursorDao) {
    this.dao = dao;
  }
......
import { CursorDao } from "../../../app/di/interfaces";
import Timestamp from "../../../app/util/Timestamp";
import CursorCreator from "../../../app/application/timeline/CursorCreator";

describe('CursorCreatorTest', () => {

  it('カーソルが0, 0の時のテスト', async () => {
    const dao = new CursorDaoMock();
    const cursorCreator = new CursorCreator(dao);
    const expectSecond = Math.floor(Date.now() / (1000 * 24 * 60 * 60)) * (24 * 60 * 60);
    expect(await cursorCreator.create()).toBe(new Timestamp(expectSecond, 0));
  });
........

環境

  • react native
  • typescript
  • jest
  • inversifyJs

やってみたこと

  • @Inject (...)を取ったらエラーが出なくなった
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

constructor(@inject(***) private hoge: Hoge) { ...
で解決

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.54%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる