【发布时间】:2014-03-18 14:52:33
【问题描述】:
我正在尝试为我的应用程序编写单元测试,例如,我想我知道如何测试 GET 请求; 我正在测试的控制器具有以下功能,应该可以获取“帐户创建视图”
public function getCreate() {
return View::make('account.create');
}
另外,在路由文件中也有这样的引用
/*
Create account (GET)
*/
Route::get('/account/create', array(
'as' => 'account-create',
'uses' => 'AccountController@getCreate'
));
我正在做的测试看起来像这样:
public function testGetAccountCreate()
{
$response = $this->call('GET', '/account/create');
$this->assertTrue($response->isOk());
$this->assertResponseOk();
}
现在这个测试通过了,但是如果我想测试 POST 请求呢? 我要测试的post函数如下:
public function postCreate() {
$validator = Validator::make(Input::all(),
array(
'email' => 'required|max:50|email|unique:users',
'username' => 'required|max:20|min:3|unique:users',
'password' => 'required|min:6',
'password_again' => 'required|same:password'
)
);
if ($validator->fails()) {
return Redirect::route('account-create')
->withErrors($validator)
->withInput();
} else {
$email = Input::get('email');
$username = Input::get('username');
$password = Input::get('password');
// Activation code
$code = str_random(60);
$user = User::create(array(
'email' => $email,
'username' => $username,
'password' => Hash::make($password),
'password_temp' => '',
'code' => $code,
'active' => 0
));
if($user) {
Mail::send('emails.auth.activate', array('link' => URL::route('account-activate', $code), 'username' => $username), function($message) use ($user) {
$message->to($user->email, $user->username)->subject('Activate your account');
});
return Redirect::route('account-sign-in')
->with('global', 'Your account has been created! We have sent you an email to activate your account.');
}
}
}
这在路由文件中也有这样的引用:
/*
Create account (POST)
*/
Route::post('/account/create', array(
'as' => 'account-create-post',
'uses' => 'AccountController@postCreate'
));
我尝试编写以下测试但没有成功。我不确定出了什么问题,我认为是因为这需要数据而我没有正确传递它们?任何开始进行单元测试的线索,不胜感激。
public function testPostAccountCreate()
{
$response = $this->call('POST', '/account/create');
$this->assertSessionHas('email');
$this->assertSessionHas('username');
$this->assertSessionHas('email');
}
测试的输出是:
There was 1 failure:
1) AssetControllerTest::testPostAccountCreate
Session missing key: email
Failed asserting that false is true.
/www/assetlibr/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:271
/www/assetlibr/app/tests/controllers/AssetControllerTest.php:23
【问题讨论】: