(100分)js中,这是什么语法?

bsnry 2017-10-29 12:27:21
问题1:

express框架里的response对象,

res.status(500)
.send(e.message);


为什么可以连续调用 ?

问题2:

var app = require('../app');
var supertest = require('supertest');

var request = supertest(app);

var should = require('should');

describe('test/app.test.js', function () {
// 我们的第一个测试用例,好好理解一下
it('should return 55 when n is 10', function (done) {

request.get('/fib')

.query({n: 10})
.end(function (err, res) {
// 由于 http 返回的是 String,所以我要传入 '55'。
res.text.should.equal('55');

// done(err) 这种用法写起来很鸡肋,是因为偷懒不想测 err 的值
// 如果勤快点,这里应该写成
/*
should.not.exist(err);

should.not.exist(err); 这是什么蛋疼语法?


...全文
641 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsnry 2017-11-06
  • 打赏
  • 举报
回复
引用 9 楼 jslang 的回复:
expect(UserMock.calledOnce).to.be.true; true在这里是be对象的属性名,例如: var be = {true:123}; alert(be.true);
那我得请教一下了,如果是属性名,那么也天牛逼了,预留关键字都能作为属性名。 expect(UserMock.calledOnce).to.be.true; expect 返回一个对象,该对象里有个属性to,to也是对象, to对象有个属性叫be, be对象有个属性叫true 如果按照这个推理逻辑,那么expect(UserMock.calledOnce).to.be.true; 在这里有什么作用呢? 这可以是 supertest,也就是单元测试的一个库, 我看到这行代码,第一眼感觉,就是 判断某个属性是否为true。 既然true是be对象的属性,难道 这一句的做用是判断true属性的值是true?
天际的海浪 2017-11-06
  • 打赏
  • 举报
回复
引用 11 楼 bsnry 的回复:
[quote=引用 9 楼 jslang 的回复:] expect(UserMock.calledOnce).to.be.true; true在这里是be对象的属性名,例如: var be = {true:123}; alert(be.true);
那我得请教一下了,如果是属性名,那么也天牛逼了,预留关键字都能作为属性名。 expect(UserMock.calledOnce).to.be.true; expect 返回一个对象,该对象里有个属性to,to也是对象, to对象有个属性叫be, be对象有个属性叫true 如果按照这个推理逻辑,那么expect(UserMock.calledOnce).to.be.true; 在这里有什么作用呢? 这可以是 supertest,也就是单元测试的一个库, 我看到这行代码,第一眼感觉,就是 判断某个属性是否为true。 既然true是be对象的属性,难道 这一句的做用是判断true属性的值是true? [/quote] 对象的属性名可以是任何的字符串,预留关键字当然也可以,就连 if for 等语句都可以。 只是由于语句有语法冲突不能用obj.for的写法,要用obj["for"]的写法。 只不过这样容易造成他人理解不便,大家很少采用。 至于expect(UserMock.calledOnce).to.be.true; 在这里有什么作用?那就是人家程序作者的事了, 可能是用setter,getter用了映射函数。你可以看看它的api说明文档。
functionsub 2017-11-06
  • 打赏
  • 举报
回复
引用 11 楼 bsnry 的回复:
[quote=引用 9 楼 jslang 的回复:] expect(UserMock.calledOnce).to.be.true; true在这里是be对象的属性名,例如: var be = {true:123}; alert(be.true);
那我得请教一下了,如果是属性名,那么也天牛逼了,预留关键字都能作为属性名。 expect(UserMock.calledOnce).to.be.true; expect 返回一个对象,该对象里有个属性to,to也是对象, to对象有个属性叫be, be对象有个属性叫true 如果按照这个推理逻辑,那么expect(UserMock.calledOnce).to.be.true; 在这里有什么作用呢? 这可以是 supertest,也就是单元测试的一个库, 我看到这行代码,第一眼感觉,就是 判断某个属性是否为true。 既然true是be对象的属性,难道 这一句的做用是判断true属性的值是true? [/quote] 预留关键字当做属性名,这没什么问题啊。 至于to.be.ture,这样的写法,不是有setter,getter吗?这里面可以做事。
清晨v 2017-10-31
  • 打赏
  • 举报
回复
返回对象本身,所以可以连续调用啊,类似于java中的方法执行完返回this,可以继续调用
天际的海浪 2017-10-30
  • 打赏
  • 举报
回复
expect(UserMock.calledOnce).to.be.true; true在这里是be对象的属性名,例如: var be = {true:123}; alert(be.true);
bsnry 2017-10-30
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
should.not.exist(err); should对象的not属性返回的值也是一个对象。 exist()是not对象的方法。 类似于我们常用的 document.body.getElementsByTagName("p")
看这里: I have some controller / route which handles a user signing up: controllers/user.js const User = require('../models/User'); // What I want to mock! ... /** * POST /signup * Create a new local account. */ exports.postSignup = (req, res, next) => { ... const user = new User({ email: req.body.email, password: req.body.password }); ... I want to test that User is called with the right args. test/userIntegrationTest.js const request = require('supertest'); const app = require('../app.js'); const sinon = require('sinon'); const User = require('../models/User'); describe('POST /signup', () => { it('should create user with valid email', (done) => { const formdata = {email: 'te.st@gmail.com', password: 'asdf'}; const UserMock = sinon.mock(User); // This mock doesn't do what I want! request(app) .post('/signup') .send(formdata) .expect(200) .end(function(res) { expect(UserMock.calledOnce).to.be.true; expect(UserMock.calledWith(formdata)); }) }); }); 这里的这个true呢? 是布尔型还是啥东西?
圣殿骑士18 2017-10-29
  • 打赏
  • 举报
回复
很好玩的写法
Go 旅城通票 2017-10-29
  • 打赏
  • 举报
回复
类似jquery的链式写法,返回下一个对象,只不过jquery返回jqueyr对象

Web开发学习资料推荐
easyui开发技巧
Web前端开发框架
usecf 2017-10-29
  • 打赏
  • 举报
回复
链式写法 返回的都一个对象 然后直接调用对象的方法
weixin_40841020 2017-10-29
  • 打赏
  • 举报
回复
哈哈,这是一种很优美的语法; 假设要实现functionOne(obj).functionTwo(obj); 那么 functionOne的函数要返回一个对象,这个对象里要包含一个functionTwo的方法 function functionOne(xx) { // dosomething... return { "functionTwo": function(xx) { // dosomething... } }; } 2. 这个就是传说中的回调 一般是在处理耗时的运算或者复杂运算之后执行一个函数, 用处目前多用于遍历、异步, 函数结构差不多就是 function xx(obj, callback) { // dosomething... callback(/* <Object>*/ param); callback.call(/*<Object>*/ /* 回调函数中的this*/ obj,/* <Object> */ param); // 这种方式比较耗时,能不用还是不用 }
markfengfeng 2017-10-29
  • 打赏
  • 举报
回复
这应该就是链式调用的方式吧。 拆解一下就是: res.status(500).send(e.message) => var obj = res.status(500); obj.send(e.message); 下面的同理: should.not.exist(err); => var obj = should.not; obj.exist(err);
天际的海浪 2017-10-29
  • 打赏
  • 举报
回复
should.not.exist(err); should对象的not属性返回的值也是一个对象。 exist()是not对象的方法。 类似于我们常用的 document.body.getElementsByTagName("p")
似梦飞花 2017-10-29
  • 打赏
  • 举报
回复
返回一个对象就可以 . . . . 的掉了啊 java不也是吗

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧