stdlib-js / stdlib-js/stdlib

[RFC]: Migrate from tape to in-house @stdlib/test/harness

Đang mở
#10,365 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
JavaScript
Star
6k
Fork
1.3k
Merge trung bình
1 ngày 3 giờ
Pull request đã merge (30 ngày)
611

Mô tả

### Description

This RFC proposes

## Proposal: Migrate stdlib Tests to In-House `@stdlib/test/harness`

This proposal delivers a tape-equivalent in-house test runner as `@stdlib/test/harness`, directly porting its minimal TAP API while matching `@stdlib/bench/harness` patterns. It eliminates the tape dep, supports only stdlib's used assertions (equal, strictEqual, ok, deepEqual, pass, fail, plan, end, test), and adds `@stdlib/string/format` interpolation—no parallelism, grouping, or extras like mocha/jest.

### Before/After Test File

**Before (tape):**
```
'use strict';

var tape = require( 'tape' );
var foo = require( './../lib' );

tape( 'main export is a function', function test( t ) {
t.ok( true, 'should be true' );
t.strictEqual( typeof foo, 'function', 'main export is a function' );
t.end();
});

tape( 'computes correctly', function test( t ) {
t.plan( 2 );
t.equal( foo( 3 ), 9, 'returns 9' );
t.deepEqual( foo( ),, 'deep equal' );[1][2][3]
t.end();
```

### After (`@stdlib/test/harness`):

**After (`@stdlib/test/harness`):**
```
```javascript
'use strict';

var test = require( '@stdlib/test/harness' );
var foo = require( './../lib' );

test( 'main export is a function', function test( t ) {
t.ok( true, 'should be true' );
t.strictEqual( typeof foo, 'function', 'main export is %s', 'function' );
t.end();
});

test( 'computes correctly', function test( t ) {
t.plan( 2 );
t.equal( foo( 3 ), 9, 'returns %d', 9 );
t.deepEqual( foo( ),, 'deep equal' );[1][2][3]
t.end();
});

```

**Changes**: Swap `require('tape')` → `require('@stdlib/test/harness')`. Assertions identical—no renames/refactors. Interpolation optional (%s/%d/%j via `@stdlib/string/format`).

## Study of References

Reviewed tape source (tape-testing/tape): TAP stream via events, nested tests, async end(), assertion tracking. Compared to `@stdlib/bench/harness`: Similar `b.bench()`/`test()`, exports harness/stream factory, stdout TAP—no deps. Stdlib tests (e.g., Makefile/package.json scans): Use ~6 assertions max, plain TAP, no advanced tape features. Impl ports tape's core (test context, assert/incr count, TAP lines) to ~400 LOC Node streams.

## Automation Strategy

- Publish `@stdlib/test/harness` (bench mirror: libtests, Makefile).
- Global replace: `grep -rl "require('tape')" lib/ | xargs sed -i "s|require('tape')|require('@stdlib/test\/harness')|g"` (handles escapes).
- Glob run: Update stdlib Makefile: `$(QUIET) $(NODE) $(TOOLS_DIR)/harness.js $(shell find lib -name 'test.*.js')`.
- Validate: CI diff old/new TAP (tape | harness); fix interpolation mismatches via optional post-sed (regex scan t.equal/ok args).
- Coverage: Stick with istanbul (nyc/c8 drops Node 10-12 compat).

### Related Issues

[Idea]: develop a project test runner

### Questions

No.

### Other

No.

### Checklist

- [x] I have read and understood the [Code of Conduct](https://github.com/stdlib-js/stdlib/blob/develop/CODE_OF_CONDUCT.md).
- [x] Searched for existing issues and pull requests.
- [x] The issue name begins with `RFC:`.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu bằng cách đọc @stdlib/test/harness được đề xuất cùng với các mẫu hiện có của @stdlib/bench/harness, sau đó kiểm tra các tệp kiểm thử trong lib, package.json, Makefile của stdlib và tools/harness.js. So sánh việc thực thi kiểm thử hiện tại dựa trên tape và đầu ra TAP với harness được đề xuất; công việc được xem là hoàn tất khi phạm vi di chuyển, các assertion được hỗ trợ và việc xác thực CI đã được thống nhất và hoạt động trên tất cả các kiểm thử bị ảnh hưởng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
javascript, node.js
Lĩnh vực
build-system, testing-qa, tooling
Loại issue
Tái cấu trúc
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
20/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.