2017-01-28 7 views
0

I持って、次のsecurity.yml:Symfony 3のテスト用にユーザプロバイダを無効にするにはどうすればよいですか?

security: 

    # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded 
    providers: 
     in_memory: 
      memory: ~ 
     bd_provider: 
      entity: 
       class: AppBundle:Usuario 
       property: email 

    firewalls: 
     # disables authentication for assets and the profiler, adapt it according to your needs 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     main: 
      anonymous: ~ 

      form_login: 
       login_path: login 
       check_path: login 

      provider: bd_provider 

      logout: 
       path: /logout 
       target: /login 

そして、私はこの方法でテストporpusesのために認証しています:

protected function createClientWithAuthentication() 
{ 
    /* @var $client Client */ 
    $client = static::createClient(); 

    /* @var $user UserInterface */ 
    $user = $client->getContainer()->get('doctrine')->getRepository('AppBundle:Usuario')->find(5); 

    $firewallName = 'main'; 
    $token = new UsernamePasswordToken($user, $user->getPassword(), $firewallName, $user->getRoles()); 
    $session = $client->getContainer()->get('session'); 
    $session->set('_security_' . $firewallName, serialize($token)); 
    $session->save(); 

    $cookie = new Cookie($session->getName(), $session->getId()); 
    $client->getCookieJar()->set($cookie); 

    return $client; 
} 

しかし、私はin_memoryのように、テストのためのdiferentプロバイダを使用したいです。私がいたかのように

$user = new Usuario(); 
$user 
    ->setUsername('[email protected]') 
    ->setPassword('admin') 
    ->setRole('ROLE_USER_ADMIN'); 

テストは、ログインページに私を送っ:だから、私はconfig_test.yml

security: 
    providers: 
     em_memoria: 
      memory: 
       users: 
        [email protected]: 
         password: senha 
         roles: 'ROLE_SUPER_ADMIN' 

    encoders: 
      AppBundle\Entity\Usuario: plaintext 

    firewalls: 
     main: 
      provider: em_memoria 

を、以下のしかし、私は自分のコードを変更したときにこれにユーザーを組み立てることを追加しました間違ったユーザーを使用して私はここで何が欠けていますか?私は何かすべきことはありますか?

他の情報が必要な場合は、私に教えてください。私はここで説明します。

ありがとうございます。

答えて

0

私はそれを動作させることができなかったので、私はSQLiteのように、テスト環境で自分のデータベースを構成しdb。初期データを読み込むためのDataFixtureをいくつか作成し、ブートストラップファイルにtheese fixturesを呼び出しました。 [symfonyの\コンポーネント\依存性の注入\例外の\ InvalidArgumentException]エイリアスを交換することができません 「アプリ:プロバイダの

0

エイリアスをユーザープロバイダとして使用し、さまざまな環境のさまざまなサービスを参照できます。

firewalls: 
    main: 
     provider: app.user_provider 

conf.yml:

services: 
    app.user_provider: 
     alias: bd_provider 

conf_test.yml:

services: 
    app.user_provider: 
     alias: em_memoria 
+0

定義は、サービスの定義は、または他の私は、次のエラーが表示され、同じファイルである必要があります.user_provider "を実際の定義" bd_provider "で置き換えます。 [Symfony \ Component \ DependencyInjection \ Exception \ ServiceNotFoundException] 存在しないサービス "bd_provider"を要求しました。 –

+0

私はここでいくつかのコードを編集し、私は次のことを行いました:クラスTestUserProviderを作成し、ユーザーを返すカスタムプロバイダを実装しました。私のテストプロバイダは 'providers'リストの最初に指定されていますが、テストで成功して実行されますが、メインファイアウォールの下に' provider'キーを指定してもbd_providerをもう使用できません。 –

関連する問題