nar*_*gar 7 javascript unit-testing mocha.js node.js chai
不知道有没有这个功能!请告诉我这可能吗?
像这样的东西:
spy(obj, 'funcName').and.returnValue(5); // spy will return a fake data when 'funcName'called.
Run Code Online (Sandbox Code Playgroud)
嗯,我正在使用mocha
,chai-spies
考虑使用存根来代替间谍。
\n\n根据文档:
\n\n\n\n\n测试存根是具有预编程行为的函数(间谍)。除了可用于更改存根\xe2\x80\x99s 行为的方法之外,它们还支持完整的测试间谍 API。
\n
存根有一个“返回”方法来完成您正在寻找的事情。
\n\nvar stub = sinon.stub();\n\nstub.returns(54)\n\nstub(); // 54\n
Run Code Online (Sandbox Code Playgroud)\n
看起来他们添加了一个chai.spy.returns
函数来做到这一点,但 API 对我来说似乎有点奇怪。我从他们的主分支安装了最新的代码并做了一些尝试。这是我尝试过的:
var chai = require(\'chai\'),\n spies = require(\'chai-spies\');\n\nchai.use(spies);\nvar expect = chai.expect;\nvar obj = null;\n\ndescribe(\'funcName\', function() {\n\n beforeEach(function() {\n obj = {\n funcName: function() {\n return true;\n }\n }\n });\n\n // PASSES\n it(\'returns true by default\', function() {\n expect(obj.funcName()).to.be.true\n });\n\n // PASSES\n it(\'returns false after being set to a spy\', function() {\n var spyFunction = chai.spy.returns(false);\n obj.funcName = spyFunction;\n expect(obj.funcName()).to.be.false\n });\n\n // FAILS\n it(\'returns false after being altered by a spy\', function() {\n chai.spy.on(obj, \'funcName\').returns(false);\n expect(obj.funcName()).to.be.false\n });\n\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n运行这些测试的输出是:
\n\nfuncName\n \xe2\x9c\x93 returns true by default\n \xe2\x9c\x93 returns false after being set to a spy\n 1) returns false after being altered by a spy\n\n\n2 passing (14ms)\n1 failing\n\n1) funcName returns false after being altered by a spy:\n TypeError: Object #<Object> has no method \'returns\'\n at Context.<anonymous> (test.js:31:34)\n
Run Code Online (Sandbox Code Playgroud)\n\n因此,他们似乎希望您实例化一个带有返回值的间谍对象,然后用它替换该funcName
函数obj
。您无法监视一个函数并一次性设置其返回值。
此外,该功能是在2015 年 10 月添加的,此后他们就没有发布新版本。我的建议是使用更成熟的库,例如Sinon.js来进行间谍和存根。您可以使用他们的Stub API来更改函数的返回值:
\n\nsinon.stub(obj, \'funcName\').returns(5);\n
Run Code Online (Sandbox Code Playgroud)\n\nStub API 提供了更多改变函数行为的方法,甚至允许您用完全自定义的函数替换它:
\n\nvar func = function() {...}\n\nsinon.stub(obj, \'funcName\', func);\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
8416 次 |
最近记录: |