2016-02-09 39 views
1

爲了開始測試應用程序,我使用Symfony2Extension設置了Behat。Symfony2 TokenStorage在Behat中始終爲空FeatureContext

已經成立了SF2Extension,我能夠注入Symofny服務到我貝哈特語境:

contexts: 
    - My\AppBundle\Features\Security\Context\FeatureContext: 
     session: '@session' 
     tokenStorage: '@security.token_storage' 

的FeatureContext的構造函數:

public function __construct(Session $session, TokenStorage $tokenStorage)

現在,我無法克服的問題$tokenStorage在執行測試/場景時總是爲空(它們在正常瀏覽器中使用Selenium執行)。我的場景有一個用戶成功登錄到SF2應用程序,所以存在一個令牌和一個非空的TokenStorage。

雖然$tokenStorage對象被注入到Context中,但它似乎與當前正在運行的實際應用程序無關 - 它總是空的。

我很感謝您的建議。謝謝。

+0

爲什麼你需要訪問令牌存儲? –

回答

2

Behat注入到上下文中的服務與您的應用程序使用的服務不同。 Behat啓動它自己的Symfony服務容器實例。由於您尚未在您的Behat上下文中執行身份驗證過程,因此未創建身份驗證令牌。

由於您使用的是selenium驅動程序,因此您並沒有真正使用Symfony擴展來發出請求,並且您無法通過其UI(html)訪問應用程序。

即使您使用Symfony2Extension發出請求(通過配置symfony2驅動程序),它會在每個請求上引導容器的新實例。你可以做的是訪問Symfony分析器,它可能會爲你提供一些你需要的信息。

+0

那麼我需要測試某些用戶是否在登錄後在應用程序中具有預期的角色。它對我來說非常敏感,因爲我使用Selenium來通過用戶路徑來模擬和操作會話和TokenStorate,可能我錯了。我有一個場景,用戶通過Selenium登錄。我現在螞蟻去檢查他的角色。我怎樣才能做到這一點? – luqo33

+0

正如我所說的,您使用的驅動程序只能訪問用戶界面,因此您的驗證僅限於檢查用戶界面。你可以嘗試加載會話(你有cookie),但所有這些解決方案都是黑客。 –

+0

感謝您的幫助。現在很清楚。 – luqo33