我有以下ES6模块:
network.js
export function getDataFromServer() {
return ...
}
Run Code Online (Sandbox Code Playgroud)
widget.js
import { getDataFromServer } from 'network.js';
export class Widget() {
constructor() {
getDataFromServer("dataForWidget")
.then(data => this.render(data));
}
render() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来测试Widget的模拟实例getDataFromServer
.如果我使用单独的<script>
s代替ES6模块,比如在Karma中,我可以编写我的测试:
describe("widget", function() {
it("should do stuff", function() {
let getDataFromServer = spyOn(window, "getDataFromServer").andReturn("mockData")
let widget = new Widget();
expect(getDataFromServer).toHaveBeenCalledWith("dataForWidget");
expect(otherStuff).toHaveHappened();
});
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我在浏览器之外单独测试ES6模块(比如使用Mocha + babel),我会写一些类似于:
import { Widget } from 'widget.js';
describe("widget", function() {
it("should do stuff", function() {
let getDataFromServer = spyOn(?????) …
Run Code Online (Sandbox Code Playgroud) 查看mozilla文档,查看正则表达式示例(标题为"使用匹配结果创建数组"),我们有以下语句:
input:一个只读属性,它反映与正则表达式匹配的原始字符串.
index:只读属性,是字符串中匹配的从零开始的索引.
etc ...是否可以在JavaScript中创建自己的对象,该对象具有只读属性,或者这是特定浏览器实现的内置类型的特权?
在JavaScript(ES5 +)中,我试图实现以下场景:
.size
,可以通过直接属性读取从外部读取,但不能从外部设置..size
必须从原型上的某些方法维护/更新该属性(并且应保留在原型上).obj.size = 3;
不允许直接设置,就可以在侧门进入酒店.我知道我可以使用在构造函数中声明的私有变量并设置一个getter来读取它,但是我必须移动需要从原型中维护该变量的方法并在构造函数中声明它们(所以他们可以访问包含变量的闭包.对于这种特殊情况,我宁愿不从原型中取出我的方法,所以我正在寻找其他选项可能是什么.
还有什么其他想法(即使有一些妥协)?
在我的代码中,我有:
function handleMessage() {
const twilio = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
let recordings = twilio.recordings(foundConference.RecordingSid);
console.log('recordings', recordings);
return recordings.remove();
}
Run Code Online (Sandbox Code Playgroud)
在我的存根中,我有:
const sinon = require('sinon');
const twilio = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
exports.twilioRecordings = () => {
console.log('about to stub', twilio.recordings);
sinon.stub(twilio, 'recordings').returns('here');
console.log('finished stub', twilio.recordings);
return;
};
Run Code Online (Sandbox Code Playgroud)
但是,它实际上并没有创建存根函数。它仍然使用原始recordings
功能。我究竟做错了什么?
javascript ×3
browser ×1
ecmascript-6 ×1
getter ×1
mocha.js ×1
mocking ×1
node.js ×1
sinon ×1
twilio ×1
unit-testing ×1