Skip to content

2.1.0 #95

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

Open
wants to merge 55 commits into
base: jasminewd1
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
acaec8b
feat(index): add jasmine2.0 support
hankduan Jan 3, 2015
fdb03a3
docs(readme): add note about jasmine 1 vs jasmine 2
juliemr Jan 30, 2015
161e1fa
fix(errors): update webdriverjs, fix asynchronous error output
juliemr Mar 17, 2015
759dc73
chore(release): version bump for 0.0.3
juliemr Mar 18, 2015
c0f13d2
refactor(asyncTestFn): refactor async test wrapping to show more info
juliemr Apr 13, 2015
8f8b8b3
tests(context): test that the `this` variable points to the right thing
juliemr Apr 14, 2015
e758e2f
chore(release): version bump for 0.0.4
juliemr Apr 14, 2015
6eb4301
tests(beforeall): add tests to verify beforeAll working with async
juliemr Apr 14, 2015
037c7de
chore(dependencies): update Jasmine to 2.3.1
juliemr May 14, 2015
521939b
chore(release): changelog and version bump for 0.0.5
juliemr May 15, 2015
4776c16
chore(selenium-webdriver): update selenium webdriver to 2.47.0
juliemr Sep 29, 2015
7a91295
chore(ci): Use container based travis and test against node 4
juliemr Sep 29, 2015
764b432
chore(release): version bump and changelog for 0.0.6
juliemr Sep 29, 2015
f4c30a0
fix: allow empty it functions
juliemr Oct 2, 2015
55fd11e
fix(index): forward it's return value
Jan 8, 2016
9c2083e
chore(release): version bump and changelog for 0.0.7
juliemr Feb 8, 2016
550dd96
chore(test): print command line
juliemr Feb 8, 2016
38748af
chore(test): add a test to make sure that asynchronous failures fail
juliemr Feb 8, 2016
4717c0b
chore: npmignore scripts
juliemr Feb 8, 2016
750898c
fix(expectation): expectations without promises no longer add to task…
juliemr Feb 9, 2016
5abc745
chore(jasmine): update MatchFactory to allow message as function
juliemr Feb 9, 2016
6bb173b
chore(release): changelog and version bump for 0.0.8
juliemr Feb 9, 2016
b48551b
chore(travis): don't test on node 0.12
juliemr Feb 9, 2016
790c81e
fix(expectations): allow custom matchers to return a promise when act…
sjurba Feb 26, 2016
b0577dd
chore(release): changelog and version bump for 0.0.9
juliemr Apr 25, 2016
db26b1a
fix(stacktrace): do not crash if beforeEach block is rejected without…
sjelin Jun 27, 2016
a8ca7e3
chore(tests): test for async support (#49)
sjelin Jun 27, 2016
ff2e624
fix(webdriver): Pass in the control flow.
heathkit Sep 1, 2016
4408ae4
chore(release): changelog and version bump for 0.0.10 (#53)
heathkit Sep 7, 2016
8870365
deps(selenium-webdriver): upgrade to 3.0.0-beta-3 (#57)
cnishina Oct 27, 2016
70c9f62
upgrade(isPromise): expose the deferred object's promise (#58)
cnishina Oct 28, 2016
10f7653
chore(release): version bump and update changelog for beta release
cnishina Oct 28, 2016
5fe36a6
deps(selenium-webdriver): upgrade to 3.0.0 (#63)
cnishina Nov 8, 2016
4b0b308
chore(release): beta version bump and changelog update
cnishina Nov 8, 2016
79c7bf2
chore(package): add dependencies, update outdated packages (#66)
cnishina Dec 6, 2016
baf6b3e
chore(async/await): document async/await better (#60)
sjelin Nov 1, 2016
84c5a96
chore(strict mode): Fix undefined variable testFn (#67)
arielserafini Nov 21, 2016
90ec028
docs(readme): async/await is ES8 not ES7 (#64)
thorn0 Dec 5, 2016
e9ef598
chore(promises): Wait for promises explicitly (#70)
sjelin Dec 6, 2016
6023066
docs(readme): removed an extra word
ChrisAntaki Dec 6, 2016
14dbf62
chore(release): version bump and changelog update
cnishina Jan 6, 2017
ed2d3e8
chore(license): update license and update travis shield (#77)
cnishina Jan 7, 2017
cf1cd34
chore(isPromise): revert expose deferred object's promise (#78)
cnishina Jan 10, 2017
f0d0f06
chore(release): version bump and changelog update
cnishina Jan 10, 2017
27b4850
feat(SELENIUM_PROMISE_MANAGER): Support `SELENIUM_PROMISE_MANAGER=0` …
sjelin Jan 13, 2017
171cbde
feat(typescript): add types (#79)
sjelin Jan 13, 2017
369a249
feat(SELENIUM_PROMISE_MANAGER): Don't rely on `webdriver.promise` fun…
sjelin Jan 21, 2017
fae803c
feat(init): ***breaking change*** pass webdriver instance into `init(…
sjelin Jan 21, 2017
a4ae33c
chore(release): version bump and changelog update
sjelin Jan 21, 2017
ff79938
chore(release): skipping straight to 2.0.0 since 1.0.0 was accidently…
sjelin Jan 21, 2017
96824d4
chore(README): I moved `master` to `jasminewd1` (#84)
sjelin Jan 21, 2017
41577a5
support native async functions (node 7.6+) (#87)
alexeyraspopov Apr 18, 2017
374f494
Allow to specify a function as a custom matcher's message. (#29)
M0ns1gn0r Apr 18, 2017
0137d3f
minor fix to keep stack from original error (#86)
gustavomick Apr 18, 2017
3280865
chore(release): version bump and changelog update
vikerman May 9, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*.log
node_modules
built_spec
1 change: 1 addition & 0 deletions .jshintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
./built_spec/*
8 changes: 7 additions & 1 deletion .npmignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
node_modules/
spec/
.travis.yml
built_spec/
scripts/
tsconfig.json
tslint.json
.gitignore
.jshintignore
.npmignore
.travis.yml
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
sudo: false
language: node_js
node_js:
- "0.10"
- "6"

script:
- npm test
245 changes: 221 additions & 24 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,239 @@
# 1.1.0
# Changelog for jasminewd2

## Dependency Updates
- ([daa67d6])(https://github.com/angular/jasminewd/commit/daa67d6eabdd9c70306748da8a0dc0a6f2edb90f)) chore(dependencies): update to selenium-webdriver 2.43.4
# 2.1.0

## Features

- ([41577a5](https://github.com/angular/jasminewd/commit/41577a5e10420d255fb2ec12aa0ea3a8e72f14ca))
support native async functions (node 7.6+) (#87)

# 1.0.4
## Bug Fixes
- ([a088e6f](https://github.com/angular/jasminewd/commit/a088e6f175ca817f59d5eea99549e45ab5861ce0)) fix(timeouts): should call special timeout handlers only for a jasmine timeout

Previously, it used to call the resets if anything matched 'timeout'. This was too
vague, since many error messages contain that string.
- ([0137d3f](https://github.com/angular/jasminewd/commit/0137d3f2ae96ef6d51d00055d64b5a8103ae83d0))
minor fix to keep stack from original error (#86)

Closes #8
- ([374f494](https://github.com/angular/jasminewd/commit/374f4946972673f86e06a011e20fc039bb73e234))
Allow to specify a function as a custom matcher's message. (#29)

# 1.0.3
## Bug Fixes
- ([00821b3](https://github.com/angular/jasminewd/commit/00821b3180a6674012fdccab106835f5ce94bb3f)) fix(timeout): better messaging if the control flow does not have a listed last task

# 1.0.2

## Bug Fixes
- ([30b6811](https://github.com/angular/jasminewd/commit/30b68113759a7cb5c8dabc5b16ffcd89516882d8)) fix(timeout): output more information about the current task when a timeout occurs
# 2.0.0

(Skipping 1.x because `0.0.1` was originally accidently published as `1.0.0`.)

## Breaking changes

- ([fae803c](https://github.com/angular/protractor/commit/fae803cd294e5413523d37bdaa282a9f96cd65a1))
pass webdriver instance into `init()` instead of using `require()` (#83)

So where as before you would write:

```js
require('jasminewd').init(webdriver.promise.controlFlow());
```
Now you will write:

```js
require('jasminewd').init(webdriver.promise.controlFlow(), webdriver);
```

This removes the dependency on `selenium-webdriver` and protects jasminewd from having a
different webdriver instance than Protractor, which could be a huge problem if they had different
control flow settings.

This is a breaking change because it changes the API for the `init` function.

I also removed the dependency on jasmine, which didn't do anything anyway. Maybe it should have
been a peerDependency but those are deprecated.


## Features

- ([171cbde](https://github.com/angular/protractor/commit/171cbde22f307bd3cc35c4c1785f171392dca8da))
Added types (though you'll have to wait for `@types/jasminewd2` to use them) (#79)


- ([27b4850](https://github.com/angular/protractor/commit/27b485019589cd662ee69e7920893ffa50774b97))
Support `SELENIUM_PROMISE_MANAGER=0` (#72)

There are three major ways this was done in this change:
* In `callWhenIdle`, if `flow.isIdle` is not defined, we assume we are working with a
`SimpleScheduler` instance, and so the flow is effectively idle.
* In `initJasmineWd`, if `flow.reset` is not defined, we assume we are working with a
`SimpleScheduler` instance, and so don't bother resetting the flow.
* In `wrapInControlFlow`, we use `flow.promise` to create a new promise if possible. Since
`new webdriver.promise.Promise()` would have always made a `ManagedPromise`, but `flow.promise`
will do the right thing.
* In `wrapCompare`, we avoid the webdriver library entirely, and never instance any extra
promises. Using `webdriver.promise.when` and `webdriver.promise.all` could have been a problem
if our instance of `webdriver` had the control flow turned on, but another instance somewhere
did not (or even the same instance, but just at a different point in time). Instead we use the
new `maybePromise` tool, which is a mess but is also exactly what we want.
* In `specs/*`, we replace `webdriver.promise.fulfilled` with `webdriver.promise.when`.
* In `specs/*`, a new version of `adapterSpec.js` and `errorSpec.js` are created:
`asyncAwaitAdapterSpec.ts` and `asyncAwaitErrorSpec.ts`.

I also also fixed a minor bug where we weren't correctly checking for promises inside an array of
expected results. Before we had:

```js
expected = Array.prototype.slice.call(arguments, 0);

...

webdriver.promise.isPromise(expected);
```

I thought about it for a little while, and there's no way that's correct. `expected` is an
`Array<any>`, there's no way it has a `.then` function.

Closes https://github.com/angular/jasminewd/issues/69

# 1.0.1

## Bug Fixes
- ([c507b37](https://github.com/angular/jasminewd/commit/c507b37dd04cf267a437a579fc3b14063abb2ef8))
fix(index): stop infinite promise resolution

1.0.0
=====
- ([369a249](https://github.com/angular/protractor/commit/369a2499189fbcdc541f354cfede49dba9335e6b))
Don't rely on `webdriver.promise` functions (#82)

While we support `SELENIUM_PROMISE_MANAGER=0` already, we rely on `SimpleScheduler` and some other
utility functions which will be going away after the control flow has been fully deprecated. This
commit allows jasminewd to work without those utility functions, and even allows people to pass
jasminewd their own custom scheduler implementation.

This does not fix our tests, which will also break when those utility functions go away. See
https://github.com/angular/jasminewd/issues/81

Closes https://github.com/angular/jasminewd/issues/80

# 0.1.1

- ([cf1cd34](https://github.com/angular/jasminewd/commit/cf1cd34a4089b6492160349a10d717c7bcaa2c31))
chore(isPromise): revert expose deferred object's promise (#78)

# 0.1.0

Release for the selenium-webdriver 3.0.1 upgrade.

# 0.1.0-beta.1

- ([5fe36a6](https://github.com/angular/jasminewd/commit/5fe36a60102b9033180d68b238ab233a25a52393))
deps(selenium-webdriver): upgrade to 3.0.0 (#63)

fix test "should wait till the expect to run the flow"

- `isPending` exists but it is no longer part of `ManagedPromise`
- `isPending` also is no longer exported in `lib/promise.js`
- wrote an `isPending` similar to selenium-webdriver in common.js
require a minimum node version

- selenium-webdriver 3.0.0 requires node >= 6.9.0
- update travis test to use node 6

# 0.1.0-beta.0

This beta release is for the selenium-webdriver 3.0.0-beta-3 upgrade.

## Dependencies

- ([70c9f62](https://github.com/angular/jasminewd/commit/70c9f62af50018bea6ad326e12bacd9ca03e6ae5))
upgrade(isPromise): expose the deferred object's promise (#58)

- isPromise checks to see if the input parameter has a then method
- Deferred class has a promise property and no longer has a then method
- ([8870365](https://github.com/angular/jasminewd/commit/88703656b4f8a012a084ba184a4fe473f423a200))
deps(selenium-webdriver): upgrade to 3.0.0-beta-3 (#57)

# 0.0.10

- ([ff2e624](https://github.com/angular/jasminewd/commit/ff2e624159344cd83b04c6a6648334ba12e78ea6))
fix(webdriver): Pass in the control flow.

BREAKING CHANGE: The control flow now needs to be passed in when using jasminewd. This fixes
an issue where having multiple versions of selenium-webdriver in a package's dependency tree would
result in jasminewd and protractor using different control flows. You now have to initialize
jasminewd before you can use it, like so: `require('jasminewd2').init(webdriver.promise.controlFlow());`

See https://github.com/angular/protractor/issues/3505

- ([db26b1a](https://github.com/angular/jasminewd/commit/db26b1a1e66477a6f526dac56ecaaa50d2cf4700))
fix(stacktrace): do not crash if beforeEach block is rejected without any stated reason (#45)

# 0.0.9

- ([790c81e](https://github.com/angular/protractor/commit/790c81eb0aba880fffbdcb4e834eb2161141620c))
fix(expectations): allow custom matchers to return a promise when actual is not a promise

See angular/protractor#2964


# 0.0.8

- ([5abc745](https://github.com/angular/protractor/commit/5abc7457cd73a4a4ba70b3c9ceeadac6d42bbd76))
chore(jasmine): update MatchFactory to allow message as function

- ([750898c](https://github.com/angular/protractor/commit/750898c90a1cc1bef09384b60ef6e15adfe734f7))
fix(expectation): expectations without promises no longer add to task queue

Instead, expectations without promises in either expected or actual are unchanged from the
original Jasmine implementation.

See https://github.com/angular/protractor/issues/2894

# 0.0.7

- ([55fd11e](https://github.com/angular/protractor/commit/55fd11e69c2f1ba8fba9a19a8acccbe933896084))
fix(index): forward it's return value

- ([f4c30a0](https://github.com/angular/protractor/commit/f4c30a0023c6ec33b15df762226c3fe8e741d26e))
fix: allow empty it functions

# 0.0.6

- ([4776c16](https://github.com/angular/jasminewd/commit/4776c16b9a9f3a9a3de8a8dddc0e051cb32331b4))
chore(selenium-webdriver): update selenium webdriver to 2.47.0

Update selenium-webdriver to 2.47.0 from 2.45.1. This update introduces a convoluted situation
where some tests in Proractor's suite would hang - see
https://github.com/angular/protractor/issues/2245

This change includes a fix for those issues which removes the explicit
`flow.execute` wrapper around `expect` calls. This appears not to introduce any issues to existing
tests.

# 0.0.5

- ([037c7de](https://github.com/angular/jasminewd/commit/037c7de7fea4de068734b6fa250d145800863633))
chore(dependencies): update Jasmine to 2.3.1

# 0.0.4

- ([8f8b8b3](https://github.com/angular/jasminewd/commit/8f8b8b39e779559fd3b29b138d7577658b8a64b7))
tests(context): test that the `this` variable points to the right thing

Note: this means that using `this.addMatchers` no longer works inside before blocks or specs. It
should have been changed to `jamsine.addMatchers` since the upgrade to Jasmine 2. It was still
working by accident up until the previous commit.

- ([c0f13d2](https://github.com/angular/jasminewd/commit/c0f13d254966c859db22d020a5390138dbf48e64))
refactor(asyncTestFn): refactor async test wrapping to show more info

Test wrapping for Jasmine 2 now more closely follows the test wrapping for Mocha at
https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/testing/index.js

This also adds more information to the task names in the control flow, for easier debugging.

Support for Jasmine 1.3.1. Tested against minijasminenode @ 0.4.0.
# 0.0.3

Features
- ([161e1fa](https://github.com/angular/jasminewd/commit/161e1fa48deaa5ea0f485027ea8ae41562864936))
fix(errors): update webdriverjs, fix asynchronous error output

- Automatically makes tests asynchronously wait until the WebDriverJS control flow is empty.
Add some console logging, remove useless info about the last running task in the control flow, and
fix error where problems reported from done.fail were getting pushed into the following spec.

- If a `done` function is passed to the test, waits for both the control flow and until done is called.
Closes #18

- Enhances `expect` so that it automatically unwraps promises before performing the assertion.
- ([fdb03a3](https://github.com/angular/jasminewd/commit/fdb03a388d4846952c09fb0ad75a37b46674c750))
docs(readme): add note about jasmine 1 vs jasmine 2

- ([acaec8b](https://github.com/angular/jasminewd/commit/acaec8bdd157e9933d608c66204a52335fb46ee4))
feat(index): add jasmine2.0 support
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2014 Google, Inc.
Copyright (c) 2014-2017 Google, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
56 changes: 48 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
jasminewd [![Build Status](https://travis-ci.org/angular/jasminewd.png?branch=master)](https://travis-ci.org/angular/jasminewd)
jasminewd2 [![Build Status](https://travis-ci.org/angular/jasminewd.svg?branch=jasminewd2)](https://travis-ci.org/angular/jasminewd)
=========

Adapter for Jasmine-to-WebDriverJS. Used by [Protractor](http://www.github.com/angular/protractor).

**Important:** There are two active branches of jasminewd.

- [jasminewd1](https://github.com/angular/jasminewd/tree/jasminewd1) is an adapter for Jasmine 1.3, and uses the package minijasminenode. It is published to npm as `jasminewd`.
- [jasminewd2](https://github.com/angular/jasminewd/tree/jasminewd2) is an adapter for Jasmine 2.x, and uses the package jasmine. It is published to npm as `jasminewd2`.

Features
--------
Expand All @@ -11,33 +15,40 @@ Features

- If a `done` function is passed to the test, waits for both the control flow and until done is called.

- If a test returns a promise, waits for both the control flow and the promise to resolve.

- Enhances `expect` so that it automatically unwraps promises before performing the assertion.

Installation
------------
```
npm install jasminewd
npm install jasminewd2
```

Usage
-----

Assumes selenium-webdriver as a peer dependency.
In your setup:

```js
// In your setup.
var minijn = require('minijasminenode');
require('jasminewd');
var JasmineRunner = require('jasmine');
var jrunner = new JasmineRunner();
var webdriver = require('selenium-webdriver');

global.driver = new webdriver.Builder().
usingServer('http://localhost:4444/wd/hub').
withCapabilities({browserName: 'chrome'}).
build();

minijn.executeSpecs(/* ... */);
require('jasminewd2').init(driver.controlFlow(), webdriver);

jrunner.projectBaseDir = '';
jrunner.execute(['**/*_spec.js']);
```

// In your tests
In your tests:

```js
describe('tests with webdriver', function() {
it('will wait until webdriver is done', function() {
// This will be an asynchronous test. It will finish once webdriver has
Expand All @@ -52,3 +63,32 @@ describe('tests with webdriver', function() {
});
})
```

TypeScript
----------

For the typings related to the changes in the global jasmine variables (e.g.
allowing `it()` blocks to return a promise), we publish the package
`@types/jasminewd2`. If you are writing tests using jasminewd (including
Protractor tests), be sure to include `@types/jasminewd2` in your
`devDependencies`, as these global type modifications are ***not*** bundled with
the `jasminewd2` npm module.

jasminewd also exports one function directly: `init`. Unfortunately, we do not
publish typings for this function. If you call this function directly (e.g. you
are a Protractor dev), you should simply do:

```ts
require('jasminewd2').init(controlFlow, webdriver);
```

`async` functions / `await`
---------------------------

`async` functions and the `await` keyword are likely coming in ES2017 (ES8), and
available via several compilers. At the moment, they often break the WebDriver
control flow.
([GitHub issue](https://github.com/SeleniumHQ/selenium/issues/3037)). You can
still use them, but if you do then you will have to use `await`/Promises for
almost all your synchronization. See `spec/asyncAwaitAdapterSpec.ts` and
`spec/asyncAwaitErrorSpec.ts` for examples.
Loading