这个问题假设您对Laravel,Behat和Mink有一定了解。
考虑到这一点,我在从Behat FeatureContext文件中进行简单的数据库调用时遇到麻烦,该文件看起来像这样...
<?php
use App\Models\Db\User;
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Behat\MinkExtension\Context\MinkContext;
/**
* Defines application features from the specific context.
*/
class FeatureContext extends MinkContext implements Context {
public function __construct() {}
/**
* @Given I am authenticated with :email and :password
*/
public function iAmAuthenticatedWith($email, $password) {
User::where('email', $email)->firstOrFail();
$this->visitPath('/login');
$this->fillField('email', $email);
$this->fillField('password', $password);
$this->pressButton('Login');
}
}
在这种情况下运行时,我会收到此错误...
Fatal error: Call to a member function connection() on null (Behat\Testwork\Call\Exception\FatalThrowableError)
这是由这条线引起的...
User::where('email', $email)->firstOrFail();
如何在Behat / Mink FeatureContext中使用Laravel Eloquent(进行数据库调用)?我是否需要在FeatureContext的构造函数中公开某些内容?更新/添加composer.json
或behat.yml
文件中的一行?
如果有多种方法可以解决此问题,那么值得一提。
其他详细信息
Laravel:5.5.*
注意:^3.3
Mink扩展名:^2.2
Mink Selenium 2驱动程序:^1.3
Behat Config
default:
extensions:
Behat\MinkExtension\ServiceContainer\MinkExtension:
base_url: "" #omitted
default_session: selenium2
selenium2:
browser: chrome
答案 0 :(得分:2)
Laravel需要设置雄辩的语言和能力,才能正常工作。
最简单的方法是扩展laravel TestCase
并在__constructor()
调用parent::setUp();
它将像在Laravel中运行php测试单元时一样设置您的测试环境:
/**
* Setup the test environment.
*
* @return void
*/
protected function setUp()
{
if (! $this->app) {
$this->refreshApplication();
}
$this->setUpTraits();
foreach ($this->afterApplicationCreatedCallbacks as $callback) {
call_user_func($callback);
}
Facade::clearResolvedInstances();
Model::setEventDispatcher($this->app['events']);
$this->setUpHasRun = true;
}
refreshApplication()
将调用createApplication()
,它会引导Laravel并创建$this->app
对象。
/**
* Refresh the application instance.
*
* @return void
*/
protected function refreshApplication()
{
$this->app = $this->createApplication();
}