node-cronジョブを単体テストする方法

アニル

node-cronを使用して関数を呼び出す必要があり、そのための単体テストケースを作成したいと思います。ユニットテストケースは、関数がパターンに基づいて呼び出しを取得しているかどうかをテストできる必要があります。

以下は私のコードです

const server = (module.exports = {
  cronJob: null,
  scheduledJob: function(pattern) {
    server.cronJob = cron.schedule(pattern, () => {
      server.run();
    });
  },
  run: function() {
    console.log("run called");
  },
}); 
describe("entry point test suite", () => {
  it("should call function every second", (done) => {
    const pattern = "* * * * * *";
    let spy = sinon.spy(server, "run");
    server.scheduledJob(pattern);
    server.cronJob.Start();
    // to do wait for 3 sencond
    server.cronJob.Stop();
    expect(spy.callCount).eq(3);
  });
}); 

2つの質問:

  1. setTimeoutどのオプションを除いて、パターンが毎秒のようにcronジョブが3回実行されるように、3秒間待機する必要があります。

  2. このテストはエラーで失敗しています。server.cronjob.startは関数ではありません。

どうすればこれを機能させることができますか?

スライドショーp2

ユニットテストソリューションは次のとおりです。

server.js

const cron = require("node-cron");

const server = (module.exports = {
  cronJob: null,
  scheduledJob: function(pattern) {
    server.cronJob = cron.schedule(pattern, () => {
      server.run();
    });
  },
  run: function() {
    console.log("run called");
  },
});

server.test.js

const server = require("./server");
const sinon = require("sinon");
const cron = require("node-cron");
const { expect } = require("chai");

describe("57208090", () => {
  afterEach(() => {
    sinon.restore();
  });
  describe("#scheduledJob", () => {
    it("should schedule job", () => {
      const pattern = "* * * * * *";
      const runStub = sinon.stub(server, "run");
      const scheduleStub = sinon
        .stub(cron, "schedule")
        .yields()
        .returns({});
      server.scheduledJob(pattern);
      sinon.assert.calledWith(scheduleStub, pattern, sinon.match.func);
      sinon.assert.calledOnce(runStub);
      expect(server.cronJob).to.be.eql({});
    });
  });

  describe("#run", () => {
    it("should run server", () => {
      const logSpy = sinon.spy(console, "log");
      server.run();
      sinon.assert.calledWith(logSpy, "run called");
    });
  });
});

100%のカバレッジでのユニットテスト結果:

  57208090
    #scheduledJob
      ✓ should schedule job
    #run
run called
      ✓ should run server


  2 passing (12ms)

----------------|----------|----------|----------|----------|-------------------|
File            |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------------|----------|----------|----------|----------|-------------------|
All files       |      100 |      100 |      100 |      100 |                   |
 server.js      |      100 |      100 |      100 |      100 |                   |
 server.test.js |      100 |      100 |      100 |      100 |                   |
----------------|----------|----------|----------|----------|-------------------|

あなたはユニットテストを依頼しました。統合テストが必要な場合は、新しい投稿を作成してください。

ソースコード:https//github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/57208090

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

毎月node-cronジョブをスケジュールする方法は?

分類Dev

node.jsのawsでcronジョブを実行する方法

分類Dev

Jestを使用したnode-cronジョブ関数のテスト

分類Dev

単体テストの実行時に、node.jsアプリケーションからのアプリケーションログメッセージを抑制する方法は?

分類Dev

node-cronがcronジョブの実行にかかる時間を確認する方法

分類Dev

node-cronで次のcronジョブのタイミングを取得する

分類Dev

他のモジュールを必要とするNode.jsモジュールを単体テストする方法と、グローバルなrequire関数をモックする方法は?

分類Dev

Node.jsベースのcronジョブを記述して、MongoDBコレクションを削除し、db.copyDatabaseコマンドを発行する方法

分類Dev

Node.jsの複数のサブフォルダーでMochaに単体テストを実行させる方法

分類Dev

Node-Cron:最後のジョブが完了していることを確認する方法

分類Dev

promise処理を使用した単体テスト-node.js

分類Dev

node.jsで並行して複数のcronジョブを回避する

分類Dev

node jasmine-redis呼び出しを含む関数の単体テストを行う方法は?

分類Dev

Websocketを使用したVue.js / Node.jsアプリの単体テスト

分類Dev

単体テストでオブジェクトを比較する適切な方法

分類Dev

node.jsでassertステートメントを有効/無効にする簡単な方法

分類Dev

共通パッケージのピア依存関係としてreactを使用してnode.jsで単体テストを実行すると、「モジュールが見つかりません」

分類Dev

node-cronは3時間ごとにジョブを実行します

分類Dev

Node.jsとCronジョブで間隔を設定しますか?

分類Dev

Node.jsとCronジョブで間隔を設定しますか?

分類Dev

node-REDjsonオブジェクト-json値を抽出する方法

分類Dev

cronジョブとajaxを使用したNode.js

分類Dev

Node.jsのJSONオブジェクトでmySQLテーブルを更新する方法は?

分類Dev

Node.jsでオブジェクトのリストをトラバースする方法

分類Dev

Node.js、ws、express-session:ws.upgradeReqからセッションオブジェクトを取得する方法

分類Dev

MomentJSを単体テストする方法

分類Dev

ActionFilterAttributeを単体テストする方法

分類Dev

単一のシステムで異なるバージョンのnode / npmを使用するにはどうすればよいですか?

分類Dev

現在アクティブなバージョンのnode.jsをnvmでアンインストールする

Related 関連記事

  1. 1

    毎月node-cronジョブをスケジュールする方法は?

  2. 2

    node.jsのawsでcronジョブを実行する方法

  3. 3

    Jestを使用したnode-cronジョブ関数のテスト

  4. 4

    単体テストの実行時に、node.jsアプリケーションからのアプリケーションログメッセージを抑制する方法は?

  5. 5

    node-cronがcronジョブの実行にかかる時間を確認する方法

  6. 6

    node-cronで次のcronジョブのタイミングを取得する

  7. 7

    他のモジュールを必要とするNode.jsモジュールを単体テストする方法と、グローバルなrequire関数をモックする方法は?

  8. 8

    Node.jsベースのcronジョブを記述して、MongoDBコレクションを削除し、db.copyDatabaseコマンドを発行する方法

  9. 9

    Node.jsの複数のサブフォルダーでMochaに単体テストを実行させる方法

  10. 10

    Node-Cron:最後のジョブが完了していることを確認する方法

  11. 11

    promise処理を使用した単体テスト-node.js

  12. 12

    node.jsで並行して複数のcronジョブを回避する

  13. 13

    node jasmine-redis呼び出しを含む関数の単体テストを行う方法は?

  14. 14

    Websocketを使用したVue.js / Node.jsアプリの単体テスト

  15. 15

    単体テストでオブジェクトを比較する適切な方法

  16. 16

    node.jsでassertステートメントを有効/無効にする簡単な方法

  17. 17

    共通パッケージのピア依存関係としてreactを使用してnode.jsで単体テストを実行すると、「モジュールが見つかりません」

  18. 18

    node-cronは3時間ごとにジョブを実行します

  19. 19

    Node.jsとCronジョブで間隔を設定しますか?

  20. 20

    Node.jsとCronジョブで間隔を設定しますか?

  21. 21

    node-REDjsonオブジェクト-json値を抽出する方法

  22. 22

    cronジョブとajaxを使用したNode.js

  23. 23

    Node.jsのJSONオブジェクトでmySQLテーブルを更新する方法は?

  24. 24

    Node.jsでオブジェクトのリストをトラバースする方法

  25. 25

    Node.js、ws、express-session:ws.upgradeReqからセッションオブジェクトを取得する方法

  26. 26

    MomentJSを単体テストする方法

  27. 27

    ActionFilterAttributeを単体テストする方法

  28. 28

    単一のシステムで異なるバージョンのnode / npmを使用するにはどうすればよいですか?

  29. 29

    現在アクティブなバージョンのnode.jsをnvmでアンインストールする

ホットタグ

アーカイブ