Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Crypt和Laravel phpunit测试_Php_Laravel_Encryption_Laravel 5_Phpunit - Fatal编程技术网

使用Crypt和Laravel phpunit测试

使用Crypt和Laravel phpunit测试,php,laravel,encryption,laravel-5,phpunit,Php,Laravel,Encryption,Laravel 5,Phpunit,我正在使用phpunit和Laravel来执行一些测试。我有很多加密的数据库数据 在我的一个测试中,我填写了一个表单,一旦表单完成,数据将使用Crypt::encrypt('data from field goes here')进行加密 代码如下: $this->visit('/requests/create') ->seePageIs('/requests/create') ->type('FirstNameTest1',

我正在使用phpunit和Laravel来执行一些测试。我有很多加密的数据库数据

在我的一个测试中,我填写了一个表单,一旦表单完成,数据将使用
Crypt::encrypt('data from field goes here')
进行加密

代码如下:

$this->visit('/requests/create')
             ->seePageIs('/requests/create')
             ->type('FirstNameTest1', 'first_name')
             ->press('Create Request')
             ->see('The request has been created.');

// Fails here
$this->seeInDatabase('requests', ['first_name' => Crypt::encrypt('FirstNameTest1')]);
我收到以下错误消息:

在数据库表[requests]中找不到 匹配属性 [{“名字”:“EYJPDII6INFWBGJMSU9RR0NHMJFNMJR4QVVYALE9PSISINZHBHVLIJIADBMCGNXYDSRLHJNDD3M2E5OGXQBUVKAHHZDEPIOERDCYTWQYTZZUN4MD0ILCJTYWMIOIJLN2U2MZZZYTLHMDGYTMXOWJMMGQYZYZDU0MZIMMZJKMKMDM1ZYW2YWYW2YWYW2YWZYWZYZYZYZZZZYMZYMZZYMZYN0=”]

我试图手动检查记录创建后是否存在,但没有显示。我记得读过一些关于运行测试时数据不持久的内容,所以这很有意义。。。但是,您能想到它在测试期间无法找到该记录的任何原因吗?

Crypt::encrypt()功能不会创建可复制的哈希。这就是您无法找到记录的原因,因为存储在数据库中的哈希与您要查找的第二个哈希不同

例如,下面是一个
php artisan tinker
会话的输出:

>>> Illuminate\Support\Facades\Crypt::encrypt('hello');
=> "eyJpdiI6IlU5bFFhV3JTWHozMklKbjFNc2VqVlE9PSIsInZhbHVlIjoieHZOK2ZSc0pNWlJWeUNYRktVNHc2dz09IiwibWFjIjoiOTI3YjY3MDI5OWJjMTU2M2RhMWFkYmNkOTJmMmE0OTU4MGE5MDNlNTk5NWZiOTgxNjA3Yjk1YTZiNTc1NjAwZCJ9"
>>> Illuminate\Support\Facades\Crypt::encrypt('hello');
=> "eyJpdiI6IjRHWDBvNkFQZmhJSUd0aFByZEFROGc9PSIsInZhbHVlIjoib00waTBpYThRZ3dkNTA5WWUxZWd0QT09IiwibWFjIjoiNzAwYzQ1NzliOTRiODg0M2Y3YTQ0YWIzNWY5NDcwNTJiMDJiYTgxZmJkM2U4MmQ2OWM2OTE3OGY4ZWVhNzgxMCJ9"
如您所见,
Crypt::encrypt()
函数对同一文本连续运行两次,产生了不同的散列

您需要为测试找到一个不同的断言,例如从数据库检索记录,并检查
Crypt::decrypt($first_name)==“FirstNameTest1”

Crypt::encrypt()。这就是您无法找到记录的原因,因为存储在数据库中的哈希与您要查找的第二个哈希不同

例如,下面是一个
php artisan tinker
会话的输出:

>>> Illuminate\Support\Facades\Crypt::encrypt('hello');
=> "eyJpdiI6IlU5bFFhV3JTWHozMklKbjFNc2VqVlE9PSIsInZhbHVlIjoieHZOK2ZSc0pNWlJWeUNYRktVNHc2dz09IiwibWFjIjoiOTI3YjY3MDI5OWJjMTU2M2RhMWFkYmNkOTJmMmE0OTU4MGE5MDNlNTk5NWZiOTgxNjA3Yjk1YTZiNTc1NjAwZCJ9"
>>> Illuminate\Support\Facades\Crypt::encrypt('hello');
=> "eyJpdiI6IjRHWDBvNkFQZmhJSUd0aFByZEFROGc9PSIsInZhbHVlIjoib00waTBpYThRZ3dkNTA5WWUxZWd0QT09IiwibWFjIjoiNzAwYzQ1NzliOTRiODg0M2Y3YTQ0YWIzNWY5NDcwNTJiMDJiYTgxZmJkM2U4MmQ2OWM2OTE3OGY4ZWVhNzgxMCJ9"
如您所见,
Crypt::encrypt()
函数对同一文本连续运行两次,产生了不同的散列


您需要为测试找到一个不同的断言,例如从数据库检索记录并检查
Crypt::decrypt($first_name)==“FirstNameTest1”
我知道这是一个旧线程,但我想提供另一个允许使用
assertDatabaseHas
的解决方案

$this->app->instance('encrypter', tap(Mockery::mock(), function ($mock) {
    $mock
        ->shouldReceive('encrypt')->once()
        ->with('111223333', true)
        ->andReturnArg(0);
}));

我知道这是一个旧线程,但我想提供另一个允许使用
assertDatabaseHas
的解决方案

$this->app->instance('encrypter', tap(Mockery::mock(), function ($mock) {
    $mock
        ->shouldReceive('encrypt')->once()
        ->with('111223333', true)
        ->andReturnArg(0);
}));

你是个巫师!非常感谢。我有一种感觉,这是沿着这些路线的东西;就是说不清楚。感谢。如果您需要对加密信息进行快速、准确的匹配搜索,可以使用HMAC。你是个巫师!非常感谢。我有一种感觉,这是沿着这些路线的东西;就是说不清楚。感谢。如果您需要对加密信息进行快速、准确的匹配搜索,可以使用HMAC。这怎么能解决OP问题?这怎么能解决OP问题?