2017-11-08 4 views
0

彼らはある程度のシーケンシャルにする必要があるため、私は、単語シリーズに重点を私はエクスプレスのREST API上で実行しようとしている一連のテストを持っています。私に説明してみましょう:他のモカ試験に依存してモカ試験を作成するにはどうすればよいですか?

テスト、順番に:

  1. APIにアクセスできるのですか?
  2. APIは正しく接続して認証しますか?
  3. 認証トークンを使用してデータストアに書き込むことはできますか?
  4. 認証トークンを使用して、データストアに書き込まれたばかりのデータを取得できますか?
  5. Authトークンを使用して、書き込まれたデータを変更することができます(別の検索で機能するかどうかテストします)。

これらの手順は、実際には順番どおりになると意味がありますが、モカは順番にテストを実行していないようです。私はステップ1を実行し、ステップ1-2を実行するテスト、ステップ1-3を実行するテストなどを行うことができますが、それは間違いなくDRYではありません。私はbeforeafterのチェーンを設定しようとすることもできますが、それは慣習にはあてはまりません。

は、プロセス内の連続的なステップをチェックモカテストを実行する適切な方法はありますか?私は繰り返しの試験に追加の手順を追加するこのパターンを取り除くにしようとしている

...

describe('Api',() => { 
    it('should be accessible', (done) => { 
     // Try to connect: 
     Api.connect((error, conn) => { 
      done(error); 
     }); 
    }); 

    it('should connect and authenticate properly', (done) => { 
     // Try to connect: 
     Api.connect((error, api) => { 
      if (error) done(error); 
      // Then try to authenticate: 
      api.authenticate(TEST_AUTH_CREDENTIALS, (error, conn) => { 
       done(error); 
      }); 
     }); 
    }); 

    it('should allow for data to be written to the data store', (done) => { 
     // Try to connect: 
     Api.connect((error, api) => { 
      if (error) done(error); 
      // Then try to authenticate: 
      api.authenticate(TEST_AUTH_CREDENTIALS, (error, conn) => { 
       if (error) done(error); 
       // Then try to write data: 
       conn.write(generateTestData(), (error, res) => { 
        done(err); 
       }); 
      }); 
     }); 
    }); 

    it('should allow for written data to be read from the data store', (done) => { 
     // Try to connect: 
     Api.connect((error, api) => { 
      if (error) done(error); 
      // Then try to authenticate: 
      api.authenticate(TEST_AUTH_CREDENTIALS, (error, conn) => { 
       if (error) done(error); 
       let testData = generateTestData(); 
       // Then try to write data: 
       conn.write(testData, (error, res) => { 
        if (error) done(error); 
        // Then try to read data: 
        conn.readLast((error, res) => { 
         if (error) done(error); 
         assert.equal(testData, res); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

答えて

0

モカテストはそれが続く失敗があるかどう、逐次実行されますが、次のテストでは、並行して実行されているように見えます。

https://mochajs.org/から:キャッチされない例外をマッピングしながら、

モカテストが

正しいテストケースに、柔軟かつ正確な 報告のためにできるように、逐次実行たぶんあなたはそれが最初の後に停止することができます失敗しましたが、私はこのフラグを動作させることができませんでした:

-b、 - テストの間の最初のテストの失敗

例通過状態:

describe('Api',() => { 
    var api, conn; 

    it('should be accessible', (done) => { 
    // Try to connect: 
    Api.connect((error, new_api) => { 
     if (error) {done(error);} else { 
     api = new_api 
     done(); 
     } 
    }); 
    }); 

    it('should authenticate properly', (done) => { 
    // Then try to authenticate: 
    api.authenticate(TEST_AUTH_CREDENTIALS, (error, new_conn) => { 
     if (error) {done(error);} else { 
     conn = new_conn; 
     done(); 
     } 
    }); 
    }); 

    it('should allow for data to be written to the data store', (done) => { 
    // Then try to write data: 
    conn.write(generateTestData(), (error, res) => { 
     if (error) {done(error);} else { 
     done(); 
     } 
    }); 
    }); 
}); 
+0

私が本当に尋ねるしようとしていることは、それぞれ前の手順の詳細手順を構築するシーケンシャルテストのパターンを回避する方法です。接続します。接続して認証します。接続して認証し、次に書き込みます。接続してからauthを書いてから、pear treeに読み込み、分枝を書いてください。私が意味することをよりよく表現するために、上記の例を追加しました。 – TheEnvironmentalist

+0

私が何かを逃していない限り、ただしないでください。例えば。最初の2つのテストでは、テストの外にあるvarsにapiとconnを保存して、次のテストに渡すことができます。モカはそれらを順番に実行します。 – Symmetric

+0

実際には、最後のテスト以外のすべてを削除できませんか?エラーがある場合、すでに各レベルでdone()を呼び出しています。必要に応じて、各コールレベルでさらにassert()を追加できます。 – Symmetric

関連する問題