Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for a title, docstrings-tags and expose private methods #10

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

pietervdvn
Copy link

Hi Danr,

I'm quite fond of doctesting, but found a few missing features that would improve my life. So, I gave it a go to improve doctest-ts.

The first issue is that, when testing a private method, the generated doctest would not compile as this private method is not visible in the describe block (at least not in mocha/jest). The function exposePrivates will rewrite a piece of code and replace every private-keyword with a public-keyword and convert this into a script, which is then used in the .doctest.ts-testfile.

A second issue was that, as soon as a tag is used in a docstring, doctest-ts would ignore tests:

/**
* This method does XYZ
* @example xyz(42)
*
* xyz(42) // => 1234
*/
function xyz(a) {
   ...
} 

The test here would be ignored. This is fixed by also checking node.jsDocs.tags in the Comments-function (L56 - L61)

At last, a small quality-of-life improvement: when the first line of a valid docstring is a comment, this is treated as the name of the test, e.g.

/**
* 
* // should equal 1234
* xyz(42) // => 1234
*
* // should equal "abc"
* xyz("abc") // => "abc"
*/
function xyz(a) {
   ...
} 

will result in

describe("xyz", () => {
  it("should equal 42", () => {...})
  it("should equal \"abc\"", () => {...})
})

I've also taken the freedom to update the version number and would be very happy with a quick deploy on NPM. However, if you are unwilling to maintain this library, I will deploy a new version myself.

Kind regards,
Pieter

@@ -30,7 +31,6 @@ export interface Comment {

export function Comments(s: string): Comment[] {
const out: Comment[] = []
function add_comment(c: string, context: string | null) {}
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seemed like this function is not used, so I removed

src/internal.ts Outdated
docstring.split(/\n\n+/m).forEach(s => {
if (is_doctest(s)) {
out.push(extractScript(s))
const script = extractScript(s)
let name = undefined
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

detect a name, if any

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant