Skip to content

Commit 0d5fab7

Browse files
authored
Merge pull request #1557 from ozyx/mocha-skip-support
Report skipped Mocha tests as "Skipped"
2 parents 0bea2b5 + 1bad505 commit 0d5fab7

File tree

2 files changed

+61
-35
lines changed

2 files changed

+61
-35
lines changed

Nodejs/Product/Nodejs/TestFrameworks/mocha/mocha.js

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
var EOL = require('os').EOL;
33
var fs = require('fs');
44
var path = require('path');
5-
var result = {
6-
'title': '',
7-
'passed': false,
8-
'stdOut': '',
9-
'stdErr': ''
10-
};
115
// Choose 'tap' rather than 'min' or 'xunit'. The reason is that
126
// 'min' produces undisplayable text to stdout and stderr under piped/redirect,
137
// and 'xunit' does not print the stack trace from the test.
@@ -22,6 +16,17 @@ function hook_outputs() {
2216
process.stdout.write = append_stdout;
2317
process.stderr.write = append_stderr;
2418
}
19+
function reset_result() {
20+
return {
21+
'title': '',
22+
'passed': false,
23+
'pending': false,
24+
'stdOut': '',
25+
'stdErr': ''
26+
};
27+
}
28+
29+
var result = reset_result();
2530

2631
hook_outputs();
2732

@@ -142,6 +147,17 @@ var run_tests = function (testCases, callback) {
142147
});
143148
});
144149

150+
runner.on('pending', function (test) {
151+
result.pending = true;
152+
result.title = test.fullTitle();
153+
post({
154+
type: 'pending',
155+
title: result.title,
156+
result: result
157+
});
158+
result = reset_result();
159+
});
160+
145161
runner.on('test', function (test) {
146162
result.title = test.fullTitle();
147163
post({
@@ -164,12 +180,7 @@ var run_tests = function (testCases, callback) {
164180
title: result.title,
165181
result: result
166182
});
167-
result = {
168-
'title': '',
169-
'passed': false,
170-
'stdOut': '',
171-
'stdErr': ''
172-
}
183+
result = reset_result();
173184
});
174185

175186
runner.on('fail', function (test, err) {
@@ -179,12 +190,7 @@ var run_tests = function (testCases, callback) {
179190
title: result.title,
180191
result: result
181192
});
182-
result = {
183-
'title': '',
184-
'passed': false,
185-
'stdOut': '',
186-
'stdErr': ''
187-
}
193+
result = reset_result();
188194
});
189195
};
190196

Nodejs/Product/TestAdapter/TestExecutor.cs

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,29 @@ private void ProcessTestRunnerEmit(string line)
7575
{
7676
var testEvent = JsonConvert.DeserializeObject<TestEvent>(line);
7777
// Extract test from list of tests
78-
var test = _currentTests.Where(n => n.DisplayName == testEvent.title);
79-
if (test.Count() > 0)
78+
var tests = _currentTests.Where(n => n.DisplayName == testEvent.title);
79+
if (tests.Count() > 0)
8080
{
81-
if (testEvent.type == "test start")
81+
switch (testEvent.type)
8282
{
83-
_currentResult = new TestResult(test.First());
84-
_currentResult.StartTime = DateTimeOffset.Now;
85-
_frameworkHandle.RecordStart(test.First());
86-
}
87-
else if (testEvent.type == "result")
88-
{
89-
RecordEnd(_frameworkHandle, test.First(), _currentResult, testEvent.result);
83+
case "test start":
84+
{
85+
_currentResult = new TestResult(tests.First());
86+
_currentResult.StartTime = DateTimeOffset.Now;
87+
_frameworkHandle.RecordStart(tests.First());
88+
}
89+
break;
90+
case "result":
91+
{
92+
RecordEnd(_frameworkHandle, tests.First(), _currentResult, testEvent.result);
93+
}
94+
break;
95+
case "pending":
96+
{
97+
_currentResult = new TestResult(tests.First());
98+
RecordEnd(_frameworkHandle, tests.First(), _currentResult, testEvent.result);
99+
}
100+
break;
90101
}
91102
}
92103
else if (testEvent.type == "suite end")
@@ -354,13 +365,20 @@ private NodejsProjectSettings LoadProjectSettings(string projectFile)
354365
};
355366
}
356367

357-
private void RecordEnd(IFrameworkHandle frameworkHandle, TestCase test, TestResult result, ResultObject resultObject)
358-
{
359-
var standardOutputLines = resultObject.stdout.Split('\n');
360-
var standardErrorLines = resultObject.stderr.Split('\n');
361-
result.EndTime = DateTimeOffset.Now;
362-
result.Duration = result.EndTime - result.StartTime;
363-
result.Outcome = resultObject.passed ? TestOutcome.Passed : TestOutcome.Failed;
368+
private void RecordEnd(IFrameworkHandle frameworkHandle, TestCase test, TestResult result, ResultObject resultObject) {
369+
String[] standardOutputLines = resultObject.stdout.Split('\n');
370+
String[] standardErrorLines = resultObject.stderr.Split('\n');
371+
372+
if (null != resultObject.pending && (bool)resultObject.pending)
373+
{
374+
result.Outcome = TestOutcome.Skipped;
375+
}
376+
else
377+
{
378+
result.EndTime = DateTimeOffset.Now;
379+
result.Duration = result.EndTime - result.StartTime;
380+
result.Outcome = resultObject.passed ? TestOutcome.Passed : TestOutcome.Failed;
381+
}
364382
result.Messages.Add(new TestResultMessage(TestResultMessage.StandardOutCategory, String.Join(Environment.NewLine, standardOutputLines)));
365383
result.Messages.Add(new TestResultMessage(TestResultMessage.StandardErrorCategory, String.Join(Environment.NewLine, standardErrorLines)));
366384
result.Messages.Add(new TestResultMessage(TestResultMessage.AdditionalInfoCategory, String.Join(Environment.NewLine, standardErrorLines)));
@@ -420,11 +438,13 @@ public ResultObject()
420438
{
421439
title = String.Empty;
422440
passed = false;
441+
pending = false;
423442
stdout = String.Empty;
424443
stderr = String.Empty;
425444
}
426445
public string title { get; set; }
427446
public bool passed { get; set; }
447+
public bool? pending { get; set; }
428448
public string stdout { get; set; }
429449
public string stderr { get; set; }
430450
}

0 commit comments

Comments
 (0)