Opened 2 years ago
Last modified 2 months ago
#45785 assigned enhancement
Update Underscore to the latest version
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Future Release | Priority: | normal |
Severity: | normal | Version: | |
Component: | External Libraries | Keywords: | early needs-testing needs-patch |
Focuses: | Cc: |
Description
Let's keep WordPress up-to-date with the latest Underscore version.
WordPress 5.0.2 includes Underscore 1.8.3 as of this report but Underscore 1.9.1 is the latest version.
See Underscore changelog at https://underscorejs.org/#changelog
Attachments (2)
Change History (16)
#3
@
21 months ago
- Keywords needs-refresh added
- Milestone changed from Awaiting Review to 5.3
Thanks for the patch, @hareesh-pillai!
Underscore is now managed by the package.json
file. The version needs to be updated in that file and the appropriate changes to the package-lock.json
file also need to be included in the patch.
#4
@
18 months ago
- Keywords commit added; needs-refresh removed
Thanks for your work on this, @hareesh-pillai!
I did some testing and discovered a console error. But it turns out this already exists in core. I opened #48021 for that.
#7
@
18 months ago
- Resolution fixed deleted
- Status changed from closed to reopened
Reopening to address test failures:
>> tinymce.obsolete - HTML elements non-conforming to HTML 5.0 >> Message: TypeError: undefined is not an object (evaluating 'a.replace') >> Actual: null >> Expected: undefined >> file:///home/travis/build/WordPress/wordpress-develop/build/wp-includes/js/underscore.min.js:1 >> tinymce.obsolete - HTML elements non-conforming to HTML 5.0 >> Message: Expected 6 assertions, but 7 were run >> Actual: null >> Expected: undefined >> test@file:///home/travis/build/WordPress/wordpress-develop/tests/qunit/vendor/sinon-qunit.js:61:21
The failures come from tests/qunit/wp-includes/js/tinymce/tinymce-obsolete.js
, however renaming that file just leads to similar failures in other files.
It's also worth noting that the failures are inconsistent, sometimes I get a different message:
>> Video Media Widget - video widget control renderPreview >> Message: TypeError: undefined is not an object (evaluating 'a.replace') >> Actual: null >> Expected: undefined >> file:///S:/home/wordpress.test/develop.svn.wordpress.org/build/wp-includes/js/underscore.min.js:1
I was able to track down the issue to this commit cleaning up the _.debounce() function, before that commit the tests pass successfully.
Not sure what's specifically causing the issue here, I guess there's some kind of a race condition between Underscore's _.debounce()
and QUnit's internal timeout handling.
#9
@
18 months ago
- Keywords needs-testing added; commit removed
- Milestone changed from 5.3 to Future Release
I looked at this a bit today. The _.debounce()
function invokes _.delay()
with 4 arguments, but that function appears to only accept 3 arguments. Removing this
from this line in Underscore fixes the problem. It's strange that only one are two tests are failing (and with inconsistent messages), but all of the front end functionality seems to be working as best I can tell.
Going to move this to Future Release for now since this is not a pressing change. If someone a little more familiar with Underscore is able to investigate in time for 5.3, we can move it back. But, it's possible that an upstream PR may be needed.
#11
@
3 months ago
I've taken a brief look at this, and don't see any link between Underscore and QUnit here. (Note that the upstream test suite for Undescore.js itself also uses QUnit, which is passing.)
Neither of QUnit nor Underscore modifies setTimeout, however. I do notice the error above mentions Sinon and sinon-qunit, which do modify the setTimeout reference globally. I suspect that might be what's causing an issue here.
#12
@
3 months ago
I've updated underscore locally to 1.9.1 and re-ran npm && npm run grunt travis:js
which (I think) fetches the new library, copies it in-place, and runs the tests.
It did not cause a failure, however. Perhaps other changes or updates have since fixed the issue? Or perhaps I've not followed all the steps needed to reproduce it...
This ticket was mentioned in Slack in #core by hellofromtonya. View the logs.
3 months ago
#14
@
2 months ago
- Keywords needs-patch added; has-patch removed
- Summary changed from Update to Underscore 1.9.1 to Update Underscore to the latest version
Underscore has had many updates since then. The latest version is v1.12.0.
Changes between the latest version and the version bundled in Core can be viewed on Github.
Updating the ticket summary to reflect this.
Patch for upgrading underscore to v 1.91.