12/08/2018, 18:05

Một số cách tránh dry data test khi viết rspec với FactoryGirl

1. Đặt vấn đề. Với nhưng người làm việc với Rails chắc hẳn đã từng và đang viết rspec hằng ngày. Trong khi viết rspec thì việc tạo data test khác là quan trọng việc tạo data test giúp cho chúng ta dễ dàng viết code test hơn. Và một gem mạnh mẽ để tạo data đó là "FactoryGirl".Mặc dù có thể bạn ...

1. Đặt vấn đề.

Với nhưng người làm việc với Rails chắc hẳn đã từng và đang viết rspec hằng ngày. Trong khi viết rspec thì việc tạo data test khác là quan trọng việc tạo data test giúp cho chúng ta dễ dàng viết code test hơn. Và một gem mạnh mẽ để tạo data đó là "FactoryGirl".Mặc dù có thể bạn làm nhiều với gem này nhưng để thực sự tạo ra những data không thừa không thiếu nhằm cho việc chạy test nhanh hơn hay tránh duplidate data,.. Thì hôm nay e/m muốn nếu ra một số cách mà e/m thường làm khi tạo data test và cũng như một số cú pháp cơ bản của FactoryGirl.

2.Nôi dung

2.1 Squences trong factory

Vấn đề chúng ta thường gặp ở đây là nếu như bạn muốn tạo user có email có có tên là "emai_1@gmail.com", email_2@gmail.com,.. và cứ thế chúng ta có thể sẽ viết nó như sau:

      FactoryGirl.define  do
         factory:book do
          ...........
            email "  email_1@gmail.com
          ..........
         end
      end

Với cách viết như trên thì sau khi test thì sẽ bị duplicate email ta dùng Squences như sau:

      ````
          FactoryGirl.define  do
             factory:book do
              ...........
                sequence(:email) {|n|"email#{n}@gmail.com"}
              ..........
             end
          end
        ```

2.2 Association trong FatoryGirl

Giả sử ta có model Note có quan hệ với user và project thì đơn giản ta sẽ khởi tạo như sau:

 FactoryGirl.define do
         factory:note do 
           message"My important note."
           association:project
           association:user
        end
      end

2.3 Thêm alias cho model factories

Trong khi test nhiều khi ta muốn dùng một alias cho data để có thể phù hợp với bối cảnh test ta có sử dụng bằng cách thêm alias như sau:

    FactoryGirl.define do 
          factory:user, aliases:[:owner] do
          ...........               
          end
      end
 ```

2.4 Tránh duplicate trong factory

Ở trên mình hơn lan man về FactoryGirl một chút             </div>
            
            <div class=

0