3

モック レスポンスの作成に関する ember-cli-mirage のドキュメントを読んでいますが、まったく同じリクエストのエラー レスポンスをテストする方法がわかりません。例えば:

test("I can view the users", function() {
  var users = server.createList('user', 3);

  visit('/users');

  andThen(function() {
    equal( find('li').length, 3 );
    equal( find('li:first').text(), users[0].name );
  });
});

test("I can view the error if viewing the users returns an error", function() {
  // somehow set up an error response (?)   

  visit('/users');

  andThen(function() {
    equal( find('#error').length, 1 );
  });
});

応答を形成する唯一の方法はルートにあるようです

this.get('/users', function(db, request) {

    if (something based on the request, i guess?) {
      return new Mirage.Response(500, {}, {message: 'Oops! Something bad happenned. :('});
    } else {
        return db.users.insert([
            {name: 'Zelda', age: 142},
            {name: 'Epona', age: 58},
        ]);
    }
});

mirage はこれをどのように行うことを推奨していますか?

4

1 に答える 1

3

テスト内では、 で定義されたルート ハンドラーconfig.jsが読み込まれますが、アクセスできるため、server実際にはそれらのハンドラーを上書きできます。

この状況で私が行うことは、エラー状態のアドホック ルート ハンドラーを作成することだけです。

test("I can view the error if viewing the users returns an error", function() {
  server.get('/users', {errors: ['there was an error']}, 404);

  visit('/users');

  andThen(function() {
    equal( find('#error').length, 1 );
  });
});

サーバーはテストごとに再インスタンス化されるため、このハンドラーは他のテストには存在しません。

また、アプリケーションがエラーから回復できるかどうかをテストするのに役立つ、一時的なルート ハンドラーを記述できるようにする APIのPRもあります。

于 2015-10-07T17:58:16.487 に答える