首先我讀了this related question和this other approach (blog post)。Behat和Symfony2之前登錄場景
這是我behat.yml
:
default:
suites:
users:
contexts:
- DoctrineFixturesContext
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
- Sanpi\Behatch\Context\RestContext
- Sanpi\Behatch\Context\JsonContext
paths: [%paths.base%/features/users]
extensions:
Behat\Symfony2Extension:
kernel:
env: "test"
debug: "true"
Behat\MinkExtension:
base_url: ''
sessions:
default:
symfony2: ~
Sanpi\Behatch\Extension: ~
現在我想的是重現用戶,這是該行爲:在一次
- 用戶登錄有那麼帶標記的
Authorization
標頭
我發現的最簡單的方法是簡單地模仿用戶行爲:
class FeatureContext implements Context, SnippetAcceptingContext
{
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* @BeforeScenario @Login
*/
public function login()
{
$d = $this->request->send('POST', '/login_check', ['_username' => 'test', '_password' => 'test']);
$data = json_decode($d->getContent());
$this->request->setHttpHeader('Authorization', 'Bearer '.$data->token);
}
}
用戶是通過預先加載夾具。這種運作良好,除了Authorization
頭不通過下面的步驟保持:
Feature: Get my availables menus
@Login
Scenario: Get my menus
When I send a "GET" request to "/api/menus"
Then the response status code should be 200
的響應是401
爲什麼不通過的情況保持了Authorization頭?我怎樣才能完成這個簡單的任務?
有沒有別的不使用瀏覽器的水貂? Behat的語法很好寫測試,我也可以[另闢蹊徑](https://twitter.com/s0yuka/status/452045934353211392?lang=en)來測試我的api。 – soyuka
問題不在貂皮。 「問題」是Behatch擴展(尤其是與請求頭部相關的東西),無論如何,我也使用了很多,因爲它們非常方便。正如我寫的,你仍然可以使用小黃瓜語言(Behat語法)... – dop3
我當然明白,我的問題在於,頭文件並非通過場景持久化。從你所說的話來看,盡我所能做到的事情是不可能的,或者我不得不避免POST請求。 我認爲我會使用Gerkin和nodejs編寫我的api測試......減少頭痛。 – soyuka