茉莉花节点期望不执行
今天我开始testing茉莉花,这对我来说是新的。 由于我正在使用一个使用NodeJS开发的GraphQL服务器,因此我正在使用jasmine-node
。
以下是我自己写的第一个规范,我认为它是工作的:
const request = require('request'); const config = require('../sources/config'); const base_url = `http://localhost:${config.graphqlPort}/${config.graphqlRoute}`; describe("GraphQLServer.", () => { it("Should expect something.", () => { expect(1).not.toEqual(2); expect(1).toEqual(1); expect(true).toBe(true); expect(false).not.toBe(true); }); describe('When request is made.', () => { it('Returns statuscode 200.', () => { request.get(base_url, (error, response, body) => { console.log('Error: ', error); console.log(base_url); console.log('StatusCode: ', response && response.statusCode); console.log('Body:', body); expect(true).toBe(true); expect(true).toBe(false); expect(response.statusCode).toBe(200); expect(response.statusCode).toBe(400); done(); }); }); }); });
这给出了以下结果:
.. Finished in 0.018 seconds 2 tests, 4 assertions, 0 failures, 0 skipped Error: null http://localhost:8000/graphql StatusCode: 400 Body: {"errors":[{"message":"Must provide query string."}]}
很多,如果这正是我所期望的。 我做了一个没有查询string的请求,所以预计正文中的错误。
问题是: it("Should expect something")
里面的4个无用的(显而易见的) expects
it("Should expect something")
工作得很好。 这是结果中的4 assertions
。 其他4个expect
的内部it("Returns statuscode 200.")
是根本没有在结果(他们不失败,他们不通过),但console.log
的是。
我在网上find的每一个例子似乎都是在做我正在做的事情,但我没有设法让这个工作。
我忘记了Jasmine中的确切语法来提出一个修正,但是我相信我知道答案:这是一个经典的testing的经典案例。 testing结束后,结果会回来,所以你的expect
调用不会发生在他们可以影响testing的环境中。
我注意到你的代码和jasmine-node文档之间的一个区别是传递给it
的函数应该作为参数done
,但是你有() =>
而不是(done) =>
。 这可能会导致你看到的行为。
Kev是正确的,但Jasmine中的语法涉及在asynchronous执行完成后将您的期望语句放在promise结果中。 它看起来像这样:
it ("should do a thing with promises", function(done) { myObject.doAThingWithPromises('') .then(function (promiseResult) { expect(promiseResult).toBeDefined(); done(); }) });