Laravel 5.0单元测试会话变量的问题

时间:2016-06-01 15:38:47

标签: unit-testing laravel laravel-5 phpunit

我正在尝试对一些现有代码进行一些单元测试。我的控制器看起来像

class DefaultController extends Controller
{
    public function index() {
        if (!Session::get('answers', [])) {
            App::abort(403, 'Error.');
        }

        // Do rest of the stuff here
    }
}

我的测试类看起来像

class DefaultController extends extends TestCase {
    public function testIndex_withoutSession() {
        // Arrange
        /* Nothing to arrange now */

        // Act
        $this->action('GET', 'DefaultController@index');

        // Assert
        $this->assertResponseStatus(403);
    }

    public function testIndex_withSession() {
        // Arrange
        $this->session(['answers' => array()]);

        // Act
        $this->action('GET', 'ParticipantController@create');

        $this->assertSessionHas('answers');
        // this function is giving true

        // Assert
        $this->assertResponseStatus(200);

        $this->flushSession();
    }
}

我没有会话的测试用例工作正常,但是当我想通过模拟会话变量'答案'来检查它时。它仍然给我错误。任何人都可以通过弄清楚我做错了什么或者我怎样才能正确地帮助我?如果没有这个,我无法继续检查代码。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

answer错字之外,answers数组至少需要一个元素才能在控制器中传递falsey check。测试用例不会断言200。

在测试用例中添加一个值:

$this->session(['answers' => array('something')]);

或更改控制器:

if (!Session::has('answers')) {

答案 1 :(得分:0)

你有$this->session(['answers' => array()]); 但是你在这里寻找答案而不是答案$this->assertSessionHas('answer'); 额外的或遗失的'回答是问题。