@yii2ru

Страница 259 из 1721
Oleg
23.06.2017
05:56:33
да class UserAccountsFields extends ActiveRecord { private $_old_password; public static function tableName(){ return 'user_accounts_fields'; } public function behaviors(){ return [ 'TimestampBehavior' => [ 'class' => TimestampBehavior::className(), 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'], ], ], 'BlameableBehavior' => [ 'class' => BlameableBehavior::className(), 'createdByAttribute' => 'created_by', 'updatedByAttribute' => 'updated_by', ], ]; }

Vladislav
23.06.2017
05:56:55
используй тройное `

чтоб код вставлять

Google
M
23.06.2017
05:57:17
Покажи что в beforeInsert()

Oleg
23.06.2017
05:57:20
используй тройное `
ок, не знал, спасибо :)

Vladislav
23.06.2017
05:57:31
MyClass { private $app; public function() }

monospace получается

Oleg
23.06.2017
05:58:16
["_events":"yii\base\Component":private]=> array(2) { ["beforeInsert"]=> array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> object(yii\behaviors\TimestampBehavior)#146 (6) { ["createdAtAttribute"]=> string(10) "created_at" ["updatedAtAttribute"]=> string(10) "updated_at" ["value"]=> NULL ["attributes"]=> array(2) { ["beforeInsert"]=> array(2) { [0]=> string(10) "created_at" [1]=> string(10) "updated_at" } ["beforeUpdate"]=> array(1) { [0]=> string(10) "updated_at" } } ["skipUpdateOnClean"]=> bool(true) ["owner"]=> *RECURSION* } [1]=> string(18) "evaluateAttributes" } [1]=> NULL }

M
23.06.2017
05:58:48
Что ты мне скидываешь, метод покажи.

Oleg
23.06.2017
06:00:22
M
23.06.2017
06:02:05
я его не прописывал...
Я Timestamp/Blameable behavior одной строкой подключаю, и ты попробуй public function behaviors(){ return [ TimestampBehavior::class, BlameableBehavior::class, ]; }

Vladislav
23.06.2017
06:02:56
скнь код всей модели в fiddle

M
23.06.2017
06:02:57
Сам подумай, зачем кофигурировать что-либо, если оно не отличается от значений по умолчанию.

Vladislav
23.06.2017
06:02:59
и дай ссылку

Oleg
23.06.2017
06:03:28
дело в том, что в соседнем проекте тоже самое и там все работает, мне нужно их именовать, для того. что бы иметь возможность его отключить

M
23.06.2017
06:03:33
Я вангую у него переопределен beforeSave, а там не дернул parent из-за чего евент не триггается

Google
Oleg
23.06.2017
06:03:47
ща

Oleg
23.06.2017
06:08:47
https://pastebin.com/8aYukSrD

M
23.06.2017
06:09:33
https://pastebin.com/8aYukSrD
А зачем вообще beforeSave переопределил?

Или вырезал код?

Pavel
23.06.2017
06:10:11
useless beforeSave

M
23.06.2017
06:10:39
useless beforeSave
and afterFind)

Pavel
23.06.2017
06:10:58
ну да

M
23.06.2017
06:11:22
https://pastebin.com/8aYukSrD
У тебя вообще в БД запись сохраняется?

Vladislav
23.06.2017
06:14:07
в рулезах описаны все поля?

или есть поле, которое есть в базе, но нет в рулезах?

Pavel
23.06.2017
06:14:25
https://pastebin.com/8aYukSrD
Если код у теб в точности такой, то все должно работать. Если нет и beforeSave имеет отличные значения - проблема в нем. И как справедливо заметил M K, если запись не сохранилась в БД в принципе, то косяк при вализации

Vladislav
23.06.2017
06:14:31
сделай в мускле show create table user_accounts_fields;

и вылей сюда

или любой другой способ

Oleg
23.06.2017
06:15:26
отбой, ступил в саблайме через rmate сессия отвалилась дело было в parent::beforeSave($insert)

?

всем спасибо за помощь! ? ?

Vladislav
23.06.2017
06:16:17
напереопределялся =)

M
23.06.2017
06:18:06
Но я вам их не дам ?

Google
M
23.06.2017
06:18:21
Как обычно начнётся срач)

Oleg
23.06.2017
06:19:02
будет весело :)

M
23.06.2017
06:26:11
Блин, когда начинаю в проекте писать RAW запросы сложные - понимаю, что дальше будет ппц)

Негативный опыт)

Pavel
23.06.2017
06:39:56
вот у меня сечас задача с запросом на 350+ строк. Это можно считать сложным?

Pavel
23.06.2017
06:42:48
Не всегда plain-sql - зло. имхо

Konstantin
23.06.2017
06:48:42
Привет

Эд
23.06.2017
06:48:50
вот у меня сечас задача с запросом на 350+ строк. Это можно считать сложным?
Смотря каким способом получать их, сам объем данных не болтше

Не больше

Olga
23.06.2017
06:59:35
привет! как мокать в функциональных тестах? тест типа $I = new FunctionalTester($scenario); $I->wantTo('check login a new user'); $email = 'test@email.com'; $I->sendPOST('users', [ 'email' => $email, 'password' => '123456', ]); $I->canSeeResponseContainsJson(['email' => $email]); например, внутри регистрации у меня дергается сторонний сервис (внешнее API), я не хочу, чтобы при каждом прогоне тестов дергалось внешнее апи, а отдавало какой-то мок

Vladislav
23.06.2017
07:00:28
напиши json ответа и сунь в файл

Konstantin
23.06.2017
07:01:08
Крутое платье ?

Vladislav
23.06.2017
07:01:32
во время sendPOST дергается апи?

Vladislav
23.06.2017
07:02:39
если да,то тебе надо сендПОСТ абстрагировать

вернее интерфейс подключения к апи абстрагировать

и передавать в конструктор или типа того

и для тестов создать фейковый интерфейс

Olga
23.06.2017
07:03:47
во время sendPOST дергается апи?
ну да, во время регистрации, например загружаем данные куда-то. в регистрации вызывает какой-нибудь UserDataService и внутри льем на стронее апи

Vladislav
23.06.2017
07:03:54
который будет отдавать мок

Google
Vladislav
23.06.2017
07:04:08
оторви сам запрос к апи от sendPOST

и передавай его в сендПОСТ при запросе или при конструкторе

as u wish

остальнео выше описал

Admin
ERROR: S client not available

Vladislav
23.06.2017
07:04:59
типа напиши класс APIRequest

с методом request

ипа того

и этот метод реквест возвращает данные

после, перед запросом sendPOST создаешь экземпляр APIRequest

Olga
23.06.2017
07:05:59
так можно сделать, если делать типа через unit тесты, можно даже сам сервис замокать ($this->createMock там) , передать его как зависимость и все ок. но это тогда не тот вид тестов, который я хочу сейчас реализовать

Vladislav
23.06.2017
07:06:02
и пердаешь его sendPOSTу

ааа

так тебе костыль нужен

а не как надо)

ничего кроме хардкоджинга внутри sendPOST не могу придумать

Olga
23.06.2017
07:06:35
да почему костыль, я хочу понять как правильно

Vladislav
23.06.2017
07:06:55
правильно подключать запрос к стороннему апи через dependency uinjection\

или через set

чтоб потом тестить можно было

Google
Vladislav
23.06.2017
07:07:38
иначе хардкод внтури метода

типа, если передали параметр isTest, то не делаем запрос

а возвращаем данные сразу

Olga
23.06.2017
07:08:03
получается, что вообще нет возможности изолированно протестировать, через такой синтаксис $I = new FunctionalTester($scenario); $I->wantTo('check login a new user'); $I->sendPOST... если у меня есть хотя бы одна стороняя зависимость? ээээ ну странно же это

я не очень разобралась в фикстурах, нельзя их как-то запользовать для мока сервиса?

Vladislav
23.06.2017
07:08:39
Можно, но архитектура заранее даолжна поддерживать абсрагированность от реальности

а сейчас у тебя sendPOST полностью завязан на внешнем АПИ

именно внутрях

а повлиять на метод из теста нельзя никак по определению

Olga
23.06.2017
07:10:43
поняла, т.е. типа если я хочу, чтобы это дело сработало. мне надо как-то методу сообщить, что это вообще-то тест. например, посмотрев YII_ENV мне это не очень нравится, конечно. я думала, что может можно подменить класс

Vladislav
23.06.2017
07:11:22
подменить класс через dependency injection как раз таки можно

на проде передается класс реального запроса

на тестах тобой сгенеренный

лол, 404 участника группы

Владислав
23.06.2017
07:12:10
:)

Страница 259 из 1721