【问题标题】:Testing Model Save测试模型保存
【发布时间】:2014-07-27 15:31:25
【问题描述】:

我正在尝试做一个非常基本的test

public function testUsernameIsRequired(){
  $user = new User;
  $user->email = "phil@ipbrown.com";

  // User should not save
  $this->assertFalse($user->save());
}

在下面model

class User extends Eloquent implements UserInterface, RemindableInterface {
  use SoftDeletingTrait;

  protected $fillable = array('email', 'username', 'password');

  public static $rules = array(
    'email'     =>  'required|min:3',
    'username'  =>  'required|min:3',
    'password'  =>  'required|min:3'
  );
}

根据我的想法(...是的),这个测试应该会成功,因为在没有 required 字段的情况下保存的 User 模型实际上并没有保存。

但是这个模型会以某种方式保存,不会抛出任何错误并创建一个完全空的用户。

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 您在哪里/如何调用规则来“保存”用户而不进行验证?我没有看到你验证任何东西。
  • 我实际上不是因为除了使用我想远离的“Ardent”之外我找不到任何文档。所以我没有自我验证模型的起点,在我读到的关于模型测试的教程中也没有提到它。
  • 那么 save() 如何/为什么会失败?规则没有在任何地方应用——因此模型应该保存在你的测试中。
  • $rules 只是你编造的东西——它不会像那样开箱即用
  • 是的,这就是我不清楚的地方。 $rules 在 Laravel 教程中的某处有说明,我误以为它是系统范围的变量函数

标签: unit-testing model laravel-4 phpunit


【解决方案1】:

$rules 只是你编造的东西——它不会像那样开箱即用。您需要根据规则实际验证模型以在保存时强制执行。

Laravel 4 - Trouble overriding model's save method 将在没有 Ardent 的情况下做你想做的事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 2018-08-05
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多