THẢO LUẬN

Í anh là Viblo hay Framja a?

0
thg 4 12, 2019 6:01 SA

@pham.van.toan đầu tiên mình cũng nghĩ là họ cho AI nhận dạng hình ảnh, nhưng khi mình không up ảnh lên hoặc ảnh lung tung thì nó vẫn có thể lấy ra được những tag đó 😄, mình nghĩ là họ đã cắt ra từ cái tên công thức vì khi mình sửa cái tên thì đống tag đó cũng thay đổi theo

0

Làm gì ở đây hả em =))

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 4 12, 2019 5:47 SA

@thangtd90 Anh vừa nhắc em mới nhớ thêm 1 vấn đề nữa khi viết Test. Như em hiểu thì mình sẽ viết test dựa vào spec dự án đưa ra nhưng ở đây hình như mình đang test theo hướng dựa vào logic code, dẫn tới việc khi sửa code đồng nghĩa với việc sửa test, Vây có phải mình đã đi sai đường chăng ? Rất mong được trao đổi với anh và mọi người 😅😅

0
thg 4 12, 2019 5:12 SA

=)) cảm ơn sao lại -1 của bạn thế

0
thg 4 12, 2019 4:31 SA

Cảm ơn bạn vì đã chia sẻ những điều này 👍 Thật sự tuyệt vời.

0

ahihi

0

code nhìn hại não vãi... Có cái nào có sẵn chữ màu nó chạy như karaoke ko ta

0

cám ơn bạn, ý kiến đóng góp của bạn rất phù hơp

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 4 12, 2019 4:18 SA

@Naem @jquery123 Như anh đã chia sẻ ở trên thì để viết được Unit Test cho phần mà có liên quan đến Model rất là khó, đặc biệt là mọi người yêu cầu test cả các hàm mà có query Database. Để thực hiện được điều đó thì đòi hỏi các em phải mock cả Database connection cơ.

Cái project https://github.com/framgia/laravel-test-examples/ này là trước đây một người bạn làm cùng với anh viết ra. Mấy cái đoạn mock Database connection để viết unit test cho những phần liên quan đến Model cũng là do anh ý thiết kế, thật sự rất hay và đáng bái phúc 😄

Nếu em đang thiết kế repo theo kiểu là một tầng ở phía trước Model như hiện tại, và muốn test những query gọi từ model như vậy thì em có thể tham khảo đoạn này https://github.com/framgia/laravel-test-examples/blob/master/tests/Unit/Http/Controllers/CityControllerTest.php#L32 . Đây là phần viết Unit Test cho Controller, có các đoạn test cho các hàm CRUD ở Controller, trong đó có dùng model đấy. Hơi phức tạp một chút, giờ anh đọc lại cũng không hiểu lắm =)) Nhìn chung là flow là mock database connection, chạy hàm cần test, và expect rằng đã có câu lệnh select, update, create hay delete được gọi, với arguments cụ thể là gì, và kết quả sẽ ra sao.

P/S: Đoạn test ban đầu mà @jquery123 có viết thì cũng rất gần với khái niệm Unit Test rồi, tuy nhiên nó vẫn chưa phải là một hàm test tốt, khi mà em chỉ test được là hàm orderBy với get sẽ được gọi thôi. Chứ nội dung kết quả của hàm get thì em chưa test được. Giả sử như đoạn test của em đang pass, giờ anh vào sửa code trong repository, đoạn $this->model->orderBy('updated_at', 'DESC')->get();, anh sửa DESC thành ASC, hoặc gọi thêm một vài hàm nữa như limit chẳng hạn, thì nó vẫn tiếp tục pass 😜

+1
thg 4 12, 2019 3:09 SA

Việc request bị lỗi bạn có thể implement để handle error cho request nhé. Nếu dùng async/await bạn có thể dùng helper function này để có thể lấy được error. Ví dụ:

const to = promise => {
  return promise
    .then(data => {
      return [null, data];
    })
    .catch(err => [err, null]);
};
....
const [error, res] = await to(fetch(`https://api.tvmaze.com/shows/${id}`));
...
0
thg 4 12, 2019 3:05 SA

@devil_boom_129 Anh ơi, anh có thể hướng dẫn em cách tạo file Codebuild được không ạ! em cảm ơn .

  • A cho em xin nickname skype của anh với ạ !
0

register/boot provider chỉ là một quá trình nhỏ trong giai đoạn bootstrap của một ứng dụng Laravel. Trong đó, quá trình trước và sau khi Laravel gọi hết cả các phương thức boot trên các instance provider được định nghĩa bằng 2 loại sự kiện:

  • booting - Illuminate\Foundation\Application::booting($callback)
  • booted - Illuminate\Foundation\Application::booted($callback)

Mặc dù Laravel sử dụng thuật ngữ boot/bootstrap có vẻ hơi lẫn lộn. Nhưng căn cứ vào quá trình chạy cũng như các biến, listenners mà framework sử dụng thì chúng ta có thể định nghĩ rõ 2 khái niệm như sau:

  • bootstrap - quá trình khởi dộng framework bao gồm các giai đoạn load_env, load_config, handle_exceptions, register_facades, boot. (nếu là console kernel thì có thêm set_request)
  • boot - một giai đoạn nhỏ trong bootstrap - chính là quá trình register/boot provider.

ServiceProvider không hẳn là khái niệm trừu tượng - nó đúng với nghĩa đen "nhà cung cấp dịch vụ". Trong đó,

  • Mỗi dịch vụ chính là một instance của một class. Ví dụ, service "config" là instance của Illuminate\Config\Config class, service "db" là instance của Illuminate\Database\DatabaseManager class.
  • Register - là nơi định nghĩa là cách khởi tạo của một service.
  • Boot - là nơi các service thực hiện "hành vi" đầu tiên, cần thiết cho các tác vụ tiếp theo. Ví dụ, load routes để chuẩn bị handle http request, load commands để chuẩn bị handle console input.

Một service có thể yêu cầu nhiều service khác nên tất cả các phương thức register phải được gọi trước. $app bắt buộc phải hiểu được cách các service được tạo ra để đảm bảo quá trình boot không phát sinh lỗi "service not found".

Ví dụ:

ViewServiceProvider::register() định nghĩ một service là "view".

$this->app->singleton('view', function ($app) {});

PaginationServiceProvider::boot() cần dùng view để tải vài file pagination templates.

// $this->app['view'] được gọi trong boot nên đảm bảo chắc chắn $app đã biết cách khởi tạo service "view".
$this->app['view']->addNamespace();
+5
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 4 12, 2019 1:58 SA

@thangtd90 Em cảm ơn anh vì câu trả lời ạ, Em cũng đang follow theo laravel test của framgia. Nhưng trong phần repository đang thiết kế khác em một chút nên đang k follow theo test repository trong đó được. Cụ thể là ở đây em inject trực tiếp Model vào để sử dụng Eloquent còn ví dụ của Framgia đang dùng Query\Builder

<?php

namespace App\Repositories;

use App\Models\Permission;
use App\Repositories\BaseRepository;
use App\Repositories\Contracts\PermissionRepositoryInterface;

/**
 * Class RoleRepository
 *
 * @package App\Repositories
 */
class PermissionRepository extends BaseRepository implements PermissionRepositoryInterface
{
    /**
     * @var Permission
     */
    protected $model;

    /**
     * RoleRepository constructor.
     *
     * @param Permission $model
     */
    public function __construct(Permission $model)
    {
        parent::__construct($model);
    }
}

Nếu coi unit test em viết hiện tại là Bad Practices thì sửa như thế nào để nó thành Good Practices anh nhỉ.

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 4 12, 2019 1:43 SA

Đoạn code như ở repository ở trên theo anh nên test như thế nào cho hợp lý ạ :-? Phần ở trên đang dùng model để viết repo thì test truy vấn sql sẽ ntn ạ :-?

0

làm sao để chỉ like stt của bạn bè, mà không like các status của fanpage nào đó vậy anh? Em cảm ơn ạ ^^

0

to tay :V

+1
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí