Skip to content

Commit 82f511b

Browse files
authored
feat(jasmine-globals): add support for expectAsync with matchers toBeResolvedTo, toBeResolved, toBeRejected, toBeRejectedWith, toBeRejectedWithError (#630)
* feat(jasmine-globals): add support for expectAsync with matchers toBeResolvedTo, toBeResolved, toBeRejected, toBeRejectedWith, toBeRejectedWithError * feat(jasmine-globals): add support for expectAsync with matchers toBeResolvedTo, toBeResolved, toBeRejected, toBeRejectedWith, toBeRejectedWithError * feat(jasmine-globals): add support for expectAsync with matchers toBeResolvedTo, toBeResolved, toBeRejected, toBeRejectedWith, toBeRejectedWithError
1 parent 95f107e commit 82f511b

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

src/transformers/jasmine-globals.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,39 @@ describe('jasmine matchers', () => {
124124
})
125125
})
126126

127+
describe('expectAsync matchers', () => {
128+
test('toBeResolved', () => {
129+
expectTransformation(
130+
'await expectAsync(promise).toBeResolved()',
131+
'await expect(promise).resolves.toBeUndefined()'
132+
)
133+
})
134+
135+
test('toBeResolvedTo', () =>
136+
expectTransformation(
137+
'await expectAsync(Promise.resolve(42)).toBeResolvedTo(42)',
138+
'await expect(Promise.resolve(42)).resolves.toBe(42)'
139+
))
140+
141+
test('toBeRejected', () =>
142+
expectTransformation(
143+
'await expectAsync(Promise.reject()).toBeRejected()',
144+
'await expect(Promise.reject()).rejects.toBeDefined()'
145+
))
146+
147+
test('toBeRejectedWith', () =>
148+
expectTransformation(
149+
'await expectAsync(Promise.reject({error: 42})).toBeRejectedWith({error: 42})',
150+
'await expect(Promise.reject({error: 42})).rejects.toEqual({error: 42})'
151+
))
152+
153+
test('toBeRejectedWithError', () =>
154+
expectTransformation(
155+
`await expectAsync(rejectingPromise).toBeRejectedWithError(new Error('mayday'))`,
156+
`await expect(rejectingPromise).rejects.toThrow(new Error('mayday'))`
157+
))
158+
})
159+
127160
test('spyOn', () => {
128161
expectTransformation(
129162
`

src/transformers/jasmine-globals.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,48 @@ export default function jasmineGlobals(fileInfo, api, options) {
140140
}
141141
})
142142

143+
root
144+
.find(j.MemberExpression, {
145+
object: {
146+
type: 'CallExpression',
147+
callee: { type: 'Identifier', name: 'expectAsync' },
148+
},
149+
property: { type: 'Identifier' },
150+
})
151+
.forEach((path) => {
152+
const parentNode = path.parent.node
153+
const matcher = path.node.property
154+
155+
parentNode.callee.object.callee.name = 'expect'
156+
157+
switch (matcher.name) {
158+
case 'toBeResolvedTo': {
159+
const argument = parentNode.arguments[0]
160+
161+
parentNode.callee.property.name = argument
162+
? 'resolves.toBe'
163+
: 'resolves.toBeUndefined'
164+
break
165+
}
166+
case 'toBeResolved': {
167+
parentNode.callee.property.name = 'resolves.toBeUndefined'
168+
break
169+
}
170+
case 'toBeRejected': {
171+
parentNode.callee.property.name = 'rejects.toBeDefined'
172+
break
173+
}
174+
case 'toBeRejectedWith': {
175+
parentNode.callee.property.name = 'rejects.toEqual'
176+
break
177+
}
178+
case 'toBeRejectedWithError': {
179+
parentNode.callee.property.name = 'rejects.toThrow'
180+
break
181+
}
182+
}
183+
})
184+
143185
root
144186
.find(j.CallExpression, {
145187
// find `jasmine.createSpy(*).and.*()` expressions

0 commit comments

Comments
 (0)