[RFC]: Migrate from tape to in-house @stdlib/test/harness
- 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
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