@testspectra/react-native 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +45 -9
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1681,8 +1681,8 @@ function createMockHandle(rule, release) {
|
|
|
1681
1681
|
respondWith: async (newFixture, newOptions = {}) => {
|
|
1682
1682
|
const newObj = newFixture;
|
|
1683
1683
|
rule.response = newObj && newObj.body !== void 0 ? newObj.body : newFixture;
|
|
1684
|
-
if (newOptions.statusCode || newObj && newObj.statusCode) {
|
|
1685
|
-
rule.statusCode = newOptions.statusCode || newObj?.statusCode || 200;
|
|
1684
|
+
if (newOptions.statusCode || newObj && (newObj.statusCode || newObj.status)) {
|
|
1685
|
+
rule.statusCode = newOptions.statusCode || newObj?.statusCode || newObj?.status || 200;
|
|
1686
1686
|
}
|
|
1687
1687
|
if (newOptions.headers || newObj && newObj.headers) {
|
|
1688
1688
|
rule.headers = newOptions.headers || newObj?.headers;
|
|
@@ -1695,7 +1695,7 @@ function createMockHandle(rule, release) {
|
|
|
1695
1695
|
respondOnce: async (newFixture, newOptions = {}) => {
|
|
1696
1696
|
const newObj = newFixture;
|
|
1697
1697
|
const resp = newObj && newObj.body !== void 0 ? newObj.body : newFixture;
|
|
1698
|
-
const statusCode = newOptions.statusCode || newObj && newObj.statusCode || rule.statusCode || 200;
|
|
1698
|
+
const statusCode = newOptions.statusCode || newObj && (newObj.statusCode || newObj.status) || rule.statusCode || 200;
|
|
1699
1699
|
const headers = newOptions.headers || newObj && newObj.headers || rule.headers;
|
|
1700
1700
|
const delayMs = newOptions.delayMs ?? (newObj && newObj.delayMs) ?? rule.delayMs;
|
|
1701
1701
|
rule.respondOnceQueue.push({ response: resp, statusCode, headers, delayMs });
|
|
@@ -1731,6 +1731,19 @@ function createMockHandle(rule, release) {
|
|
|
1731
1731
|
});
|
|
1732
1732
|
}
|
|
1733
1733
|
};
|
|
1734
|
+
handle.shouldHaveCallCount = (count, options = {}) => trackStep(
|
|
1735
|
+
"assertion",
|
|
1736
|
+
{ type: "assertion", key: "have.callCount", target: `intercept ${rule.method} ${rule.pattern}`, args: [count] },
|
|
1737
|
+
async () => {
|
|
1738
|
+
const ok = await pollCondition(() => rule.callCount === count, options.timeout ?? getAssertionTimeoutMs());
|
|
1739
|
+
if (!ok) {
|
|
1740
|
+
const seen = rule.calls.map((call) => `${call.method} ${call.url}`).join(", ");
|
|
1741
|
+
throw new Error(
|
|
1742
|
+
`Expected intercept '${rule.pattern}' (${rule.method}) to have answered ${count} request(s), but it answered ${rule.callCount}${seen ? `: ${seen}` : ""}`
|
|
1743
|
+
);
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
);
|
|
1734
1747
|
const getCount = () => rule.callCount;
|
|
1735
1748
|
handle.callCount = Object.assign(getCount, {
|
|
1736
1749
|
valueOf: () => rule.callCount,
|
|
@@ -1809,6 +1822,27 @@ function recordMockCall(rule, request) {
|
|
|
1809
1822
|
}
|
|
1810
1823
|
return request;
|
|
1811
1824
|
}
|
|
1825
|
+
function readMockEnvelope(value) {
|
|
1826
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
1827
|
+
const record = value;
|
|
1828
|
+
const keys = Object.keys(record);
|
|
1829
|
+
if (keys.length === 0 || !keys.every((key) => ENVELOPE_KEYS.has(key))) return null;
|
|
1830
|
+
const status = typeof record.status === "number" ? record.status : record.statusCode;
|
|
1831
|
+
if (!("body" in record) && typeof status !== "number") return null;
|
|
1832
|
+
return { body: record.body ?? "", statusCode: status, headers: record.headers, delayMs: record.delayMs };
|
|
1833
|
+
}
|
|
1834
|
+
async function resolveMockResponse(rule, request) {
|
|
1835
|
+
const consumed = consumeMockResponse(rule);
|
|
1836
|
+
const value = typeof consumed.body === "function" ? await consumed.body(request) : consumed.body;
|
|
1837
|
+
const envelope = readMockEnvelope(value);
|
|
1838
|
+
if (!envelope) return { ...consumed, body: value };
|
|
1839
|
+
return {
|
|
1840
|
+
body: envelope.body,
|
|
1841
|
+
statusCode: envelope.statusCode ?? consumed.statusCode,
|
|
1842
|
+
headers: { ...consumed.headers, ...envelope.headers },
|
|
1843
|
+
delayMs: envelope.delayMs ?? consumed.delayMs
|
|
1844
|
+
};
|
|
1845
|
+
}
|
|
1812
1846
|
function consumeMockResponse(rule) {
|
|
1813
1847
|
if (rule.respondOnceQueue.length > 0) {
|
|
1814
1848
|
const queued = rule.respondOnceQueue.shift();
|
|
@@ -1841,10 +1875,12 @@ function mockResponseBodyText(body) {
|
|
|
1841
1875
|
if (typeof body === "object" && body !== null) return JSON.stringify(body);
|
|
1842
1876
|
return String(body ?? "");
|
|
1843
1877
|
}
|
|
1844
|
-
var DEFAULT_MOCK_RESPONSE_HEADERS;
|
|
1878
|
+
var ENVELOPE_KEYS, DEFAULT_MOCK_RESPONSE_HEADERS;
|
|
1845
1879
|
var init_mock_intercept = __esm({
|
|
1846
1880
|
"../../core/worker-runtime/src/dsl/mock_intercept.ts"() {
|
|
1847
1881
|
"use strict";
|
|
1882
|
+
init_reporter();
|
|
1883
|
+
ENVELOPE_KEYS = /* @__PURE__ */ new Set(["status", "statusCode", "headers", "body", "delayMs"]);
|
|
1848
1884
|
DEFAULT_MOCK_RESPONSE_HEADERS = {
|
|
1849
1885
|
"Content-Type": "application/json; charset=utf-8",
|
|
1850
1886
|
"Access-Control-Allow-Origin": "*",
|
|
@@ -2106,7 +2142,7 @@ async function patchedFetch(origFetch, input, init) {
|
|
|
2106
2142
|
if (rule.aborted) {
|
|
2107
2143
|
throw new TypeError(`Spectra.intercept() aborted ${method} ${url} (${rule.abortReason || "Failed"})`);
|
|
2108
2144
|
}
|
|
2109
|
-
const consumed =
|
|
2145
|
+
const consumed = await resolveMockResponse(rule, intercepted);
|
|
2110
2146
|
if (consumed.delayMs && consumed.delayMs > 0) await sleep(consumed.delayMs);
|
|
2111
2147
|
return buildMockResponse(consumed);
|
|
2112
2148
|
}
|
|
@@ -2143,8 +2179,7 @@ function patchXMLHttpRequest() {
|
|
|
2143
2179
|
setTimeout(fireError, 0);
|
|
2144
2180
|
return;
|
|
2145
2181
|
}
|
|
2146
|
-
const
|
|
2147
|
-
const respond2 = () => {
|
|
2182
|
+
const respond2 = (consumed) => {
|
|
2148
2183
|
const bodyText = mockResponseBodyText(consumed.body);
|
|
2149
2184
|
Object.defineProperties(xhr, {
|
|
2150
2185
|
status: { value: consumed.statusCode, configurable: true },
|
|
@@ -2160,8 +2195,9 @@ function patchXMLHttpRequest() {
|
|
|
2160
2195
|
xhr.dispatchEvent?.(new Event("load"));
|
|
2161
2196
|
xhr.dispatchEvent?.(new Event("loadend"));
|
|
2162
2197
|
};
|
|
2163
|
-
|
|
2164
|
-
|
|
2198
|
+
void resolveMockResponse(rule, intercepted).then((consumed) => {
|
|
2199
|
+
setTimeout(() => respond2(consumed), consumed.delayMs && consumed.delayMs > 0 ? consumed.delayMs : 0);
|
|
2200
|
+
});
|
|
2165
2201
|
};
|
|
2166
2202
|
return xhr;
|
|
2167
2203
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testspectra/react-native",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"description": "Native Android & iOS component test runner for React Native with TestSpectra Spectra.* DSL",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"testspectra",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"cross-spawn": "^7.0.6",
|
|
34
34
|
"esbuild": "^0.28.2",
|
|
35
|
-
"@testspectra/matchers": "1.3.
|
|
35
|
+
"@testspectra/matchers": "1.3.3"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"react": ">=18.0.0",
|