{"action":"created","issue":{"url":"https://api.github.com/repos/DevExpress/testcafe/issues/163","labels_url":"https://api.github.com/repos/DevExpress/testcafe/issues/163/labels{/name}","comments_url":"https://api.github.com/repos/DevExpress/testcafe/issues/163/comments","events_url":"https://api.github.com/repos/DevExpress/testcafe/issues/163/events","html_url":"https://github.com/DevExpress/testcafe/issues/163","id":115368006,"number":163,"title":"APIv2 discussion","user":{"login":"inikulin","id":453071,"avatar_url":"https://avatars.githubusercontent.com/u/453071?v=3","gravatar_id":"","url":"https://api.github.com/users/inikulin","html_url":"https://github.com/inikulin","followers_url":"https://api.github.com/users/inikulin/followers","following_url":"https://api.github.com/users/inikulin/following{/other_user}","gists_url":"https://api.github.com/users/inikulin/gists{/gist_id}","starred_url":"https://api.github.com/users/inikulin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inikulin/subscriptions","organizations_url":"https://api.github.com/users/inikulin/orgs","repos_url":"https://api.github.com/users/inikulin/repos","events_url":"https://api.github.com/users/inikulin/events{/privacy}","received_events_url":"https://api.github.com/users/inikulin/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/DevExpress/testcafe/labels/!IMPORTANT!","name":"!IMPORTANT!","color":"eb6420"},{"url":"https://api.github.com/repos/DevExpress/testcafe/labels/AREA:%20client","name":"AREA: client","color":"fef2c0"},{"url":"https://api.github.com/repos/DevExpress/testcafe/labels/SYSTEM:%20API","name":"SYSTEM: API","color":"bfe5bf"},{"url":"https://api.github.com/repos/DevExpress/testcafe/labels/TYPE:%20proposal","name":"TYPE: proposal","color":"f7c6c7"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/DevExpress/testcafe/milestones/4","html_url":"https://github.com/DevExpress/testcafe/milestones/APIv2","labels_url":"https://api.github.com/repos/DevExpress/testcafe/milestones/4/labels","id":1396373,"number":4,"title":"APIv2","description":"","creator":{"login":"inikulin","id":453071,"avatar_url":"https://avatars.githubusercontent.com/u/453071?v=3","gravatar_id":"","url":"https://api.github.com/users/inikulin","html_url":"https://github.com/inikulin","followers_url":"https://api.github.com/users/inikulin/followers","following_url":"https://api.github.com/users/inikulin/following{/other_user}","gists_url":"https://api.github.com/users/inikulin/gists{/gist_id}","starred_url":"https://api.github.com/users/inikulin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inikulin/subscriptions","organizations_url":"https://api.github.com/users/inikulin/orgs","repos_url":"https://api.github.com/users/inikulin/repos","events_url":"https://api.github.com/users/inikulin/events{/privacy}","received_events_url":"https://api.github.com/users/inikulin/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":0,"state":"open","created_at":"2015-11-05T20:30:47Z","updated_at":"2015-11-11T08:36:01Z","due_on":null,"closed_at":null},"comments":15,"created_at":"2015-11-05T20:32:17Z","updated_at":"2015-11-26T10:11:18Z","closed_at":null,"body":"This is a general place for the APIv2 discussion. I'll move proposals from wiki to here. Any suggestions/ideas/proposals are welcome.\r\n\\cc @DevExpress/testcafe "},"comment":{"url":"https://api.github.com/repos/DevExpress/testcafe/issues/comments/159867172","html_url":"https://github.com/DevExpress/testcafe/issues/163#issuecomment-159867172","issue_url":"https://api.github.com/repos/DevExpress/testcafe/issues/163","id":159867172,"user":{"login":"VasilyStrelyaev","id":11459924,"avatar_url":"https://avatars.githubusercontent.com/u/11459924?v=3","gravatar_id":"","url":"https://api.github.com/users/VasilyStrelyaev","html_url":"https://github.com/VasilyStrelyaev","followers_url":"https://api.github.com/users/VasilyStrelyaev/followers","following_url":"https://api.github.com/users/VasilyStrelyaev/following{/other_user}","gists_url":"https://api.github.com/users/VasilyStrelyaev/gists{/gist_id}","starred_url":"https://api.github.com/users/VasilyStrelyaev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VasilyStrelyaev/subscriptions","organizations_url":"https://api.github.com/users/VasilyStrelyaev/orgs","repos_url":"https://api.github.com/users/VasilyStrelyaev/repos","events_url":"https://api.github.com/users/VasilyStrelyaev/events{/privacy}","received_events_url":"https://api.github.com/users/VasilyStrelyaev/received_events","type":"User","site_admin":false},"created_at":"2015-11-26T10:11:18Z","updated_at":"2015-11-26T10:11:18Z","body":"Let's try to make assertions grammatically consistent.\r\n\r\nIf we stick to the *expect smth to* phrase, we would have to add a lot of wording:\r\n\r\n`.to.eql(value), .to.eql(func), .to.eql.stored(), .to.eql.element(selector), ... `- deep equality\r\n`.to.be.true` - boolean true equality\r\n`.to.be.false` - boolean false equality\r\n`.to.be.null` - null equality\r\n`.to.be.undefined` - undefined equality\r\n`.to.be.NaN` - NaN equality\r\n`.to.be.ok` - non-null, non-undefined, non-false\r\n`.to.be.empty` - empty array, object without fields, empty strings\r\n`.to.be.more.than(value), .to.be.more.than(func), .to.be.more.than.stored(value)` - more than comparison\r\n`.to.be.less.than(value), .to.be.less.than(func), .to.be.less.than.stored(value)` - less than comparison\r\n`.to.contain(value), .to.contain(func), .to.contain.stored(value), .to.contain.element(selector), ... `- string contain substring, array contain value, object contain key, element contain text, element contain element\r\n\r\n`.to.match(regexp)` - string matches regular expression\r\n\r\n`.to.be.visible` - visibility check\r\n`.to.exist` - element present in DOM\r\n`.to.haveClass(className)` - element has one or more classname\r\n`.to.be.disabled` - element is disabled\r\n`.to.be.readonly` - input is readonly\r\n`.to.be.checked` - checkbox is checked\r\n\r\nMy suggestion is to use the phrase *expect [that] smth*\r\n\r\n`.eqls(value), .eqls(func), .eqls.stored(), .eqls.element(selector), ... `- deep equality\r\n`.is.true` - boolean true equality\r\n`.is.false` - boolean false equality\r\n`.is.null` - null equality\r\n`.is.undefined` - undefined equality\r\n`.is.NaN` - NaN equality\r\n`.is.ok` - non-null, non-undefined, non-false\r\n`.is.empty` - empty array, object without fields, empty strings\r\n`.is.more.than(value), .is.more.than(func), .is.more.than.stored(value)` - more than comparison\r\n`.is.less.than(value), .is.less.than(func), .is.less.than.stored(value)` - less than comparison\r\n`.contains(value), .contains(func), .contains.stored(value), .contains.element(selector), ... `- string contain substring, array contain value, object contain key, element contain text, element contain element\r\n\r\n`.matches(regexp)` - string matches regular expression\r\n\r\n`.is.visible` - visibility check\r\n`.exists` - element present in DOM\r\n`.hasClass(className)` - element has one or more classname\r\n`.is.disabled` - element is disabled\r\n`.is.readonly` - input is readonly\r\n`.is.checked` - checkbox is checked"}}