明天我还好人 2016-04-22 02:31 采纳率: 0%
浏览 811

laravel中phpunit使用call方法测试controller无法通过integer验证

我在本地用浏览器或者curl方式访问http://api.lizhongde1.dev.anhouse.com.cn/hft/1.0/zf/onlinelist?page_size=10地址时,都能够正常得到数据,但是在服务器中使用laravel自带的call方法验证就一直提示integer验证错误,到底怎么才能通过验证呢?
我的test方法:

 public function testOnLineList($request){
        $response = $this->call('GET', '/hft/1.0/zf/onlinelist?record_offset=10&page_size=1');
        $this->assertEquals(200, $response->getStatusCode());
        $this->assertNotEmpty($content = $response->getContent());
        $content = json_decode($content,true);
        $this->assertEquals($request,$content['msg']);
    }
原方法中的validate调用:
 $aFieldVal = $this->validate($oRequest,[
            'page_size' => 'integer|min:1|max:100',
            'record_offset' => 'integer|min:0',
        ],[
            'page_size.integer' => '每页显示数必须为整数',
            'page_size.min' => '每页显示数不得小于1',
            'page_size.max' => '每页显示数不得大于100',
            'record_offset.integer' => '偏移量必须为整数',
            'record_offset.min' => '偏移量不得小于0',
        ]);

调用测试时候的提示的错误:
ZfControllerTest::testOnLineList with data set #0 (array(10, 'aa', '每页显示数必须为整数'))
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'每页显示数必须为整数'
+'ok'

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 11:13
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在 Laravel 中,$request 是一个对象,它包含了所有请求的数据。如果你想要验证 page_sizerecord_offset 是否都是整数,并且值都在指定的范围内(例如,minmax),你可以这样做:

    public function testOnLineList($request)
    {
        $response = $this->call('GET', '/hft/1.0/zf/onlinelist?record_offset=10&page_size=1');
    
        // 验证 page_size
        $aFieldVal = $this->validate($request, [
            'page_size' => 'integer|min:1|max:100',
        ], [
            'page_size.integer' => '每页显示数必须为整数',
            'page_size.min' => '每页显示数不得小于1',
            'page_size.max' => '每页显示数不得大于100',
        ]);
    
        // 验证 record_offset
        $bFieldVal = $this->validate($request, [
            'record_offset' => 'integer|min:0',
        ], [
            'record_offset.integer' => '偏移量必须为整数',
            'record_offset.min' => '偏移量不得小于0',
        ]);
    
        if ($aFieldVal !== true && $bFieldVal !== true) {
            return false;
        }
    
        $this->assertEquals(200, $response->getStatusCode());
        $this->assertNotEmpty($content = $response->getContent());
    
        $content = json_decode($content, true);
    
        $this->assertEquals($request, $content['msg']);
    }
    

    这个示例首先验证了 page_size 的范围是否正确。然后,它再次验证了 record_offset 是否为整数,并且其值是否至少为 0。

    请注意,你需要根据你的具体需求调整这些验证规则。例如,你可能希望将 page_size.minpage_size.max 参数更改为特定的数值限制。

    评论

报告相同问题?