Session 会话,并使用BDD对其进行测试

Session 会话,并使用BDD对其进行测试,session,cakephp,bdd,Session,Cakephp,Bdd,我使用CakePHP并获得以下验证代码,以检查用户在使用资金之前的余额是否更大 class Investment extends AppModel { public $validate = array( 'amount' => array( 'rule4' => array( 'rule' => array('greaterBalance'), 'message' => 'Sorry, you

我使用CakePHP并获得以下验证代码,以检查用户在使用资金之前的余额是否更大

class Investment extends AppModel {
    public $validate = array(
    'amount' => array(
        'rule4' => array(
            'rule' => array('greaterBalance'),
            'message' => 'Sorry, you do not have sufficient funds to make this investment.',
        )
    ),

    public function greaterBalance($check) {
    $user_id = CakeSession::read('Auth.User.id');
    $user = $this->User->find('first', array('conditions' => array('User.id' => $user_id)));
    $value = array_values($check);
    $amount = $value[0];        
    return ($user['User']['balance'] >= $amount);
}
当我运行bdd代码时,我得到以下错误通知:未定义索引:cookie位于/usr/share/cakephp/2.4.5/lib/Cake/Model/Datasource/CakeSession.php第486行

我怀疑这是由于在更大的平衡中使用了会话。 当我得到插件sizuhiko/bdd时,我使用Console/cake bdd.story运行bdd 在使用bdd时,有没有办法模仿或做一些事情来使用会话

要素文件

Scenario: Investor invests money in a pitch
  When I invest "500" pounds 
  Then The balance should be deducted 

贝壳不用饼干。它们不是浏览器

因此,您的代码有一个体系结构缺陷:您不应该在模型内使用会话数据,而是将其传递给模型。将用户数据传递到像user_id这样的字段中的模型,并从那里使用它。这将使会话与模型分离,并使shell中的测试和使用更加容易


此外,您不应以访问方式访问会话中的身份验证数据。正确的方法是使用Auth components用户方法。

谢谢。我已经更改了代码以从控制器获取用户id。我在CakePhp文档示例中简单地问,您可以获得模型的会话。