- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过大量研究但没有发现任何有用的信息,我来这里看看是否可以得到一些帮助。我正在为我的代码构建一些功能测试,其中一个测试需要一个假用户才能工作,因为在 Controller 的函数中我需要使用这段代码访问 User
对象:
$account = $this->getUser();
$user = $account->getUser();
这是我测试中的代码:
public function testmodifyCommissionAction() {
$this->logIn();
$updateCompanyCommission = $this->client->getContainer()->get('router')->generate('updateCompanyCommission', array(), false);
$this->client->request("POST", $updateCompanyCommission, array(
'id' => rand(1, 10),
'fee' => rand(1, 10)
));
var_dump($this->client->getResponse()->getContent());
$this->assertSame(200, $this->client->getResponse()->getStatusCode()); // Test if response is OK
$this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type')); // Test if Content-Type is valid application/json
$this->assertNotEmpty($this->client->getResponse()->getContent()); // Test that response is not empty
$decoded = json_decode($this->client->getResponse()->getContent(), true);
private function logIn() {
$session = $this->client->getContainer()->get('session');
$firewall = 'secured_area';
$token = new UsernamePasswordToken('admin', null, $firewall, array('ROLE_ADMIN'));
$session->set('_security_' . $firewall, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
现在,这里的问题在哪里?如果我使用有效凭据登录我的应用程序并运行测试,则会收到此错误:
Cannot set session ID after the session has started. (500 Internal Server Error)
如果我注销并运行相同的测试,它会起作用,所以这里出了点问题,我无法得到什么,有什么帮助吗?建议?尖端?工作代码示例?
编辑:创建用户并尝试使用当前创建的用户登录
我修改了一些方法,现在这是我的当前代码:
protected function createUser() {
$kernel = new \AppKernel('test', true);
$kernel->boot();
$this->container = $kernel->getContainer();
$userManager = $this->container->get('fos_user.user_manager');
$userManager->createUser();
$data['firstname'] = $this->generateRandomString(4);
$data['lastname'] = $this->generateRandomString(4);
$data['lastname2'] = "";
$data['photo'] = "";
$data['banner'] = "";
$data['password'] = md5($this->generateRandomString(18));
$data['email'] = $this->generateRandomString(6) . "@test.com";
$user = $userManager->createAccountAndUser($data);
return $user;
}
这是我用来登录的功能,也进行了修改以添加对当前用户的支持:
private function logIn($client, $user) {
$session = $client->getContainer()->get('session');
$firewall = 'main';
$token = new UsernamePasswordToken($user, null, $firewall, array('ROLE_USER'));
$session->set('_security_' . $firewall, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
}
这是我要运行的测试:
public function testmodifyCommissionAction() {
$client = static::createClient();
$user = $this->createUser();
$this->logIn($client, $user->getUser()->getAlias());
$updateCompanyCommission = $client->getContainer()->get('router')->generate('updateCompanyCommission', array(), false);
$client->request("POST", $updateCompanyCommission, array(
'id' => rand(1, 10),
'fee' => rand(1, 10)
));
$this->assertSame(200, $client->getResponse()->getStatusCode());
$this->assertSame('application/json', $client->getResponse()->headers->get('Content-Type'));
$this->assertNotEmpty($client->getResponse()->getContent());
}
但失败并显示此消息:
PHP Fatal error: Call to a member function getUser() on a non-object in /var/www/html/kraken/src/Wuelto/Company/ApprovalBundle/Controller/FeeCompanyController.php on line 47
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:129
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:176
PHP 5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:349
PHP 6. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:745
PHP 7. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:775
PHP 8. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:783
PHP 9. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:648
PHP 10. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:838
PHP 11. ReflectionMethod->invokeArgs() /usr/share/pear/PHPUnit/Framework/TestCase.php:983
PHP 12. Wuelto\Company\ApprovalBundle\Tests\Controller\FeeCompanyControllerTest->testmodifyCommissionAction() /usr/share/pear/PHPUnit/Framework/TestCase.php:983
PHP 13. Symfony\Component\BrowserKit\Client->request() /var/www/html/kraken/src/Wuelto/Company/ApprovalBundle/Tests/Controller/FeeCompanyControllerTest.php:71
PHP 14. Symfony\Bundle\FrameworkBundle\Client->doRequest() /var/www/html/kraken/vendor/symfony/symfony/src/Symfony/Component/BrowserKit/Client.php:325
PHP 15. Symfony\Component\HttpKernel\Client->doRequest() /var/www/html/kraken/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Client.php:111
PHP 16. Symfony\Component\HttpKernel\Kernel->handle() /var/www/html/kraken/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Client.php:81
PHP 17. Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle() /var/www/html/kraken/app/bootstrap.php.cache:2303
PHP 18. Symfony\Component\HttpKernel\HttpKernel->handle() /var/www/html/kraken/app/bootstrap.php.cache:3022
PHP 19. Symfony\Component\HttpKernel\HttpKernel->handleRaw() /var/www/html/kraken/app/bootstrap.php.cache:2883
PHP 20. call_user_func_array:{/var/www/html/kraken/app/bootstrap.php.cache:2911}() /var/www/html/kraken/app/bootstrap.php.cache:2911
PHP 21. Company\ApprovalBundle\Controller\FeeCompanyController->modifyCommissionAction() /var/www/html/kraken/app/bootstrap.php.cache:2911
我找不到问题出在哪里,有什么帮助吗?
解决方案:问题出在这一行:
$this->logIn($client, $user->getUser()->getAlias());
因为我试图传递 $user->getUser()->getAlias()
而不是 $user
对象。
编辑 2:排序代码并在尝试删除最近的测试用户时出错
现在我做了一些更改并将 $this->createUser()
传递给 setUp()
函数,以便在 $this- 上拥有 User 对象>用户
变种。
public function setUp() {
static::$kernel = static::createKernel();
static::$kernel->boot();
$this->em = static::$kernel->getContainer()->get('doctrine')->getManager();
$fixture = new LoadFeeData();
$fixture->load($this->em);
$this->user = $this->createUser();
parent::setUp();
}
现在在 tearDown()
中,我试图删除我之前使用此代码创建的当前用户:
protected function tearDown() {
parent::tearDown();
$this->em->remove($this->user);
$this->em->flush();
$this->em->close();
}
但是得到这个错误:
1) Company\ApprovalBundle\Tests\Controller\FeeCompanyControllerTest::testmodifyCommissionAction
Undefined index: 0000000065c988b30000000022bd0894
/var/www/html/kraken/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2860
/var/www/html/kraken/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:1736
/var/www/html/kraken/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:1397
/var/www/html/kraken/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:1677
/var/www/html/kraken/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:1645
/var/www/html/kraken/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:647
/var/www/html/kraken/app/cache/test/jms_diextra/doctrine/EntityManager_533ab9b6c8c69.php:59
/var/www/html/kraken/src/Company/ApprovalBundle/Tests/Controller/FeeCompanyControllerTest.php:131
为什么我不能删除用户?
最佳答案
我通常做的是为测试环境启用 http_basic 安全性,然后执行以下操作以获得经过身份验证的客户端:
配置测试.yml
security:
firewalls:
wsse_secured: # This should be your firewall name
http_basic: true
接下来,确保你的测试扩展了 Symfony WebTestCase (Symfony\Bundle\FrameworkBundle\Test\WebTestCase)
然后你可以调用:
$client = $this->createClient([], [
'PHP_AUTH_USER' => $username,
'PHP_AUTH_PW' => $password,
]);
client->request("POST", $updateCompanyCommission, array(
'id' => rand(1, 10),
'fee' => rand(1, 10)
));
...
使用此方法,用户需要作为数据夹具加载,或者您可以编写一个方法在 setUp
中创建用户并在 tearDown< 中销毁用户
。这是我用来创建用户进行测试的方法:
protected function createUser($password, $timezone, $roles)
{
$kernel = new \AppKernel('test', true);
$kernel->boot();
/** @var Account $user */
$this->container = $kernel->getContainer();
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setEmail('unique-email-address@not-here.com');
$user->setUsername('auniqueusername');
$user->setPlainPassword($password);
$user->setTimezone($timezone);
$user->setEnabled(true);
foreach ($roles as $role) {
$user->addRole($role);
}
$userManager->updateUser($user);
return $user;
}
关于php - Symfony 或其他东西在执行测试时与登录用户混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693300/
这个fn是吗: function isplainobj ( obj ) { return Object.prototype.toString.call( obj ) === "[object
我尝试创建一个我没有经验的小 bash 脚本。我尝试做类似的事情: #!/bin/bash statut="na" if [ $proc = 0 ]; then statut = "close
我想重写 HighLine 的几个方法来自定义我的控制台,目前我的代码如下所示: cmd = ask("#{@prompt_label} #{@prompt_separator} ",
鉴于下面的 HTML,我尝试使用 jQuery 来匹配所有具有类“foo”的跨度的列表项,并且该跨度应包含文本“relevant”。 Some text relevant Some more
我拥有一个 5 美元 20GB SSD Digital Ocean Droplet,它几乎用完了 Docker 镜像和容器的空间。 有没有办法购买一个卷,将其连接到服务器并安全地将所有 Docker
我有这样的表: id name number result stuff stuff stuff stuff 我只想将 class = "red" 添加到
我需要计算两点之间的距离,但不是以常规方式。我需要知道“东西距离”+“南北距离”。我想这比常规的“乌鸦飞翔”计算更简单,但我仍然不知道如何做到这一点。 我想使用 MySQL 查询来执行此操作,并且最好
#include #include #include typedef struct dict_pair { void *key; void *value; struct dict_p
为什么当我尝试通过 将 char[] word 写入控制台时会发生这种奇怪的事情 Console.WriteLine(word); 我得到了一个正确的结果,但是当我写的时候 Console.Write
一个简单的例子: class C{} class B{ @Inject C c; void doSomething(){ System.out.println(c);
我想做某事,但不确定如何描述它。我有这门课 public class Company { private List _persons; private Person GetPersonByNa
我正在尝试实现我自己的 qDebug()样式调试输出流,这基本上是我目前所拥有的: struct debug { #if defined(DEBUG) template std::os
所以我正在为我的应用程序编写一个搜索功能,代码如下: - (void) selectObject: (NSString *)notes{ [axKnotes removeAllObjects]
我想在 Rust 中匹配一种复杂的继承式东西: struct Entity { pub kind: EntityKind, } pub enum EntityKind { Player
我是 SQL 新手。这没有返回任何结果...... SELECT media.id as mediaid, media.title as mediatitle, media.description
在微型 SDCard 上写入 Android things 图像并将该卡插入 Raspberry Pi 3 Model B 并打开电源,启动时显示“Auto config Please wait”然后
这是一个常见的但是文本出现在框的右侧,不是极右但几乎是这样 h3: ................................................ .................
#include #include #include #include #include int main(int argc, string argv[]) { if(argc >
所以我试图让一些东西相互堆叠。首先,查看工作链接会有所帮助,您会看到问题所在: http://brownbox.net.au/clients/matchlessphotography/ 现在我需要使用
我想在禁用 javascript 时在我的网站顶部显示一条消息(就像在 SO 上一样),但在谷歌浏览器上不起作用 最佳答案 看起来是这样。 您可以使用 javascript 隐藏“noscript”消
我是一名优秀的程序员,十分优秀!