phpunit 测试 assertNotRegExp() 没有按预期工作?

Posted

技术标签:

【中文标题】phpunit 测试 assertNotRegExp() 没有按预期工作?【英文标题】:phpunit test assertNotRegExp() not working as expected? 【发布时间】:2016-08-27 10:31:51 【问题描述】:

测试失败,断言 '"error":"message":"Book not found"' 与 PCRE 模式 "/Book not found/" 不匹配。

为什么这个模式与内容字符串不匹配?

<?php

namespace Tests\App\Http\Controllers;

use TestCase;

class BooksControllerTest extends TestCase

    /** @test **/
    public function show_route_should_not_match_an_invalid_route()
    
        $this->get('/books/this-is-invalid');

        $this->assertNotRegExp(
            '/Book not found/',
            $this->response->getContent(),
            'BooksController@show route matching when it should not.'
        );
    

【问题讨论】:

【参考方案1】:

模式/Book not found/确实匹配内容字符串"error":"message":"Book not found"。这工作正常。

请注意,您使用的是 assertNotRegExp() - 也就是说,您实际上是在说 - “确保模式 匹配字符串”。所以当模式不匹配时断言成功,当模式匹配时断言失败。

看来您实际上想使用assertRegExp() 进行测试。

【讨论】:

嗯。完成“使用 Lumen 编写 API”。我发现我误读了有关更新路线的部分。修复了 $app->get('/books/id:[\d]+', 'BooksController@show'); 的重复路由;现在测试工作。 Route 与该表达式不匹配它不会被路由到控制器。

以上是关于phpunit 测试 assertNotRegExp() 没有按预期工作?的主要内容,如果未能解决你的问题,请参考以下文章

phpunit 单元测试

PHPUnit - 使用配置文件时“未执行测试”

如何让 PHPUnit 运行所有的测试?

如何在 PHPUnit 中跨多个测试模拟测试 Web 服务?

PHPUnit - 开发后创建测试

phpunit随机重启测试