1

にアクセスしてブラウザーでテストを実行するlocalhost:4200/testsと、テストはテスト サーバー API にアクセスできます。

ただし、(testem を使用して) CI モードでテストを実行する場合、テスト サーバー API にはアクセスできません。

これを実現する方法はありますか?


詳細

ember-cli を使用して生成されたプロジェクトでは、それが実行するサーバー (Express を使用する NodeJ) を拡張できます。の手順を参照してください/server/index.js。このコマンドを実行した後:

ember serve

... このサーバーは のコンテンツを提供していますlocalhost:4200localhost:4200/apiアプリをブラウジングするときに、 で提供されるすべての API リクエストに応答するサーバーを作成しました。

ブラウザーで実行されるテストにlocalhost:4200/testsアクセスすると、これらの API にアクセスでき、問題なく実行できます。

ただし、サーバーを強制終了し、次のコマンドを使用して CI モード (testem) でテストを実行すると、次のようになります。

ember test

... ember アプリは PhantomJs を使用してヘッドレス モードで実行されますが、アプリは API にアクセスできず、ほとんどのテストが失敗します。

テストの実行を開始するときにサーバーを実行したままにしても、同じことが起こります。

Sinon や mockjax のようなものを訴えて、テスト自体の中で API リクエストをモックするのが慣習であることを理解しています。ただし、それはテストサーバーに既にあるものと重複するため、避けたいと思います。テストを CI モード (testem を使用) で実行し、テスト サーバーにアクセスする方法はありますか?

4

3 に答える 3

2

これは可能ですが、プロジェクトによっては少し複雑になる場合があります。

できることは、ember テストと並行して ember サーバーを実行することです。次に、ember データ アダプターやその他の AJAX 呼び出しのホスト設定を変更する必要があります (environment.js で構成可能にすることもできます)。

ただし、アプリ自体はまだtestemサーバーによって提供されており、AJAX呼び出しはクロスドメインになります(ポートが異なるため、両方がローカルホストとしてアクセスされている場合でも)。

次に、サーバーで CORS を有効にする必要があります。corsExpress サーバーでミドルウェアとして使用できるnpm パッケージがあります。

単純なケースでは、CORS ミドルウェアを追加するだけですぐに使用できますが、AJAX 呼び出しで認証またはカスタム ヘッダーを使用する場合は、クライアント側とサーバー側でさらに構成が必要になります。その場合は CORS を読んでください。

これが私がやった方法です。

app/adapters/application.js

export default DS.RESTAdapter.extend({
    namespace: "api",
    host: Ember.ENV.serverURL || ""
});

server/index.js

var express    = require('express');
// ...
var cors       = require('cors');

module.exports = function(app) {
    app.use(bodyParser());
    app.use(cors());
// ...
于 2014-06-28T11:20:13.983 に答える
0

https://github.com/samselikoff/ember-cli-mirageをご覧ください。内部でプリダーを使用し、アプリとテストの両方で同じデータを同時に使用できます。

私たちは最近、 http-mocks + Pretender の組み合わせからに切り替えましember-cli-mirageたが、非常に有望に見えます。

于 2015-04-21T07:03:35.350 に答える