Chạy một tệp thử nghiệm


138

Có cách nào để chạy ng testcho một tệp duy nhất thay vì cho toàn bộ bộ kiểm tra không? Lý tưởng nhất là tôi muốn có được vòng phản hồi nhanh nhất có thể khi tôi chỉnh sửa tệp, nhưng karmathực thi toàn bộ bộ trên mỗi lần lưu, hơi chậm khi bạn xây dựng bộ kiểm tra đủ lớn.


Điều này khác với Cách thực hiện chỉ một thông số thử nghiệm với angular-cli trong câu hỏi đó là về việc chạy một thông số riêng lẻ. Đây là về việc chạy một tập tin cá nhân. Giải pháp liên quan đến tính năng thông số Jasmine giống nhau, nhưng bản chất của câu hỏi hơi khác nhau.



Bạn có thể tìm thấy câu trả lời tại đây: stackoverflow.com/questions/40683673/ từ
Sahil Shikalgar

Bạn có thể tìm thấy câu trả lời tại đây: stackoverflow.com/questions/40683673/ từ
Sahil Shikalgar

Câu trả lời:


261

Tôi phát hiện ra rằng Jasmine cho phép bạn đặt tiền tố describeitphương thức với một f(để lấy nét?). Vì vậy, fdescribefit. Nếu bạn sử dụng một trong hai thứ này, nghiệp sẽ chỉ chạy các bài kiểm tra liên quan. Vì vậy, để tập trung vào tệp hiện tại, bạn chỉ cần lấy cấp cao nhất describevà thay đổi nó thành fdescribe. Hoạt động cho mục đích của tôi.


9
câu trả lời huyền thoại
danday74

2
Không thể tin chức năng quan trọng như vậy không rõ ràng và đơn giản hơn.
Tro

10
nó hoạt động nhưng nó không lý tưởng vì bạn cần thay đổi mã nguồn và cuối cùng bạn có thể kiểm tra mã đã sửa đổi trong kiểm soát nguồn.
Marco Altieri

4
Vui lòng thêm liên kết vào tài liệu chính thức , khi có thể
jgpATs2w

Tôi đã tìm kiếm cái này, Tuyệt vời
Carlos E

26

Điều đáng nói là bạn có thể vô hiệu hóa thử nghiệm cụ thể mà không cần bình luận bởi xdescribexit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

Và như ai đó đã nói nếu bạn muốn tập trung vào một số thử nghiệm sau đó fdescribefit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

Điều này có thể đạt được những ngày này thông qua các includetùy chọn. https://angular.io/cli/test#options

Đó là một trận đấu toàn cầu, vì vậy, một ví dụ:

ng test --include='**/someFolder/*.spec.ts'

Tôi không thể tìm thấy nó trong ghi chú phát hành 8.1.0, nhưng @Swoox đề cập bên dưới đây là một tính năng sau phiên bản cli 8.1.0. Cảm ơn đã tìm ra điều đó.


1
Đây dường như là một bản cập nhật gần đây. Có thể muốn bao gồm những gì phiên bản là cần thiết. CLI 8.1 là cần thiết.
Swoox

Có vẻ sẽ bị xóa trong v9.1 :(
rmcsharry

2
Tôi vừa thử nghiệm điều này trong CLI v9.1.0 và nó hoạt động hoàn hảo.
Sajjan Singh

9

Tôi thấy rằng ng testcó một tùy chọn bổ sung --includemà bạn có thể sử dụng để có thể chạy thử nghiệm cho một tệp duy nhất hoặc cho một thư mục cụ thể hoặc cho một loạt các tệp:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs


Angular 9 - dường như đã bị xóa
rmcsharry

Không, nó vẫn có sẵn trong NG 9.
Tephyr

6

Bạn có thể đi đến src/test.tsvà có thể thay đổi dòng sau:

const context = require.context('./', true, /\.spec\.ts$/);

đến

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

nhập mô tả hình ảnh ở đây


1
Nói đúng ra, đây có vẻ là câu trả lời đúng nhất mặc dù hầu hết các câu hỏi về cách làm điều này có vấn đề được giải quyết bằng cách sử dụng sự phù hợp và fdescribe. Có một vấn đề git để thực hiện điều này dễ dàng hơn trong Karma: github.com/karma-runner/karma/issues/1507 . Lý tưởng nhất, mặc dù không đơn giản, chúng tôi có thể định cấu hình Karma để chúng tôi có thể thay đổi một bài kiểm tra, sau đó chỉ cần nhấp vào nó trong trình duyệt để chạy lại bản cập nhật.
pumpkinthehead



0

Bạn phải đi src/test.tsvà có thể thay đổi mã số dòng sau 18:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

đến

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

nhập mô tả hình ảnh ở đây


-3

Hoạt động nếu bạn chỉ định tệp spec của bạn là tham số.

Ví dụ:

ng kiểm tra foo.spec.ts

Hi vọng điêu nay co ich.


4
Bạn có thể chỉ định phiên bản bạn đang sử dụng? Không hoạt động với 1.7.x
FrEaKmAn

4
Nó cũng không hoạt động như đối với tôi. Nhưng tôi đã sửa đổi nó để hoạt động với tùy chọn --main trước đường dẫn đến tệp spec. Tôi đã sử dụng một đường dẫn tuyệt đối với dấu gạch chéo về phía trước. Chưa thử một con đường tương đối. Sử dụng Angular 6. Không chắc chắn nếu đó là giải pháp tốt nhất, nhưng nó có vẻ hiệu quả với tôi.
dùng2367418
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.