php - 通过测试中的方法传递请求

标签 php laravel http testing phpunit

我的类中有一个generate() 方法,它只是创建 类实例的简写方式。它接受一个 request,该请求在方法上有类型提示。我正在尝试对此进行单元测试,我知道的唯一方法是 make 一个 answer 并通过它。这不起作用,因为它不是 request。有解决办法吗?方法如下:

public static function generate(Question $question, Request $request): self
    {
        return self::create([
            'user_id' => Auth::user()->getKey(),
            'question_id' => $question->getKey(),
            'answer_body' => $request->answer_body,
        ]);
    }

这里是测试

/** @test */
    public function it_can_generate_a_new_instance()
    {
        $user = factory(User::class)->create();
        $this->actingAs($user);

        $question = factory(Question::class)->create();
        $answer = factory(Answer::class)->make();

        Answer::generate($question, $answer);

        $this->assertEquals($user->getKey(), Answer::first()->user_id);
        $this->assertEquals($question->getKey(), Answer::first()->question_id);
        $this->assertEquals($answer->answer_body, Answer::first()->answer_body);
    }

测试通过,直到我在方法中键入提示 Request

最佳答案

您可以使用给定的属性创建一个新的请求对象。它可能有点脆弱,但它应该可以工作:

public function it_can_generate_a_new_instance()
{
    $user = factory(User::class)->create();
    $this->actingAs($user);

    $question = factory(Question::class)->create();
    $answer = factory(Answer::class)->make();
    $request = new Request([ 'answer_body' => $answer->answer_body ]);

    Answer::generate($question, $request);

    $this->assertEquals($user->getKey(), Answer::first()->user_id);
    $this->assertEquals($question->getKey(), Answer::first()->question_id);
    $this->assertEquals($answer->answer_body, Answer::first()->answer_body);
}

关于php - 通过测试中的方法传递请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461937/

相关文章:

javascript - jquery.click(function) WordPress 小部件

php - 如何保护存储在 Laravel 环境文件中的数据库凭据?

php - 如何使用具有日期条件的其他表减去整数数据?

ruby - 使用 HTTPClient Gem 设置用户代理

java - php ssh2_exec不执行java命令

php - Symfony2 : How can i see a list of open sessions

http - 同一资源的不同 RESTful 表示

http - 是否应该使用 HTTP 重定向来纠正误导性 URL

php - 使用CodeIgniter进行Sql插入、选择

php - Eloquent :混淆使用数据透视表